码迷,mamicode.com
首页 > 其他好文 > 详细

【DFS】【最短路】【spfa】【BFS】洛谷P2296 NOIP2014提高组 day2 T2 寻找道路

时间:2014-11-11 18:02:04      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   color   sp   for   div   on   2014   

存反图,从终点dfs一遍,记录下无法到达的点。

然后枚举这些记录的点,把他们的出边所连的点也全部记录。

以上这些点都是无法在最短路中出现的。

所以把两个端点都没被记录的边加进图里,跑spfa、BFS什么的随意。

 1 #include<cstdio>
 2 #include<vector>
 3 #include<cstring>
 4 #include<queue>
 5 using namespace std;
 6 #define N 10001
 7 vector<int>G[N],rG[N];
 8 queue<int>q;
 9 typedef vector<int>::iterator ITER;
10 int n,m,from,can[N],to,dis[N],x[200001],y[200001];
11 bool inq[N];
12 void dfs(int U)
13 {
14     can[U]=1;
15     for(ITER it=rG[U].begin();it!=rG[U].end();it++)
16       if(!can[*it])
17         dfs(*it);
18 }
19 void spfa(const int &s)
20 {
21     memset(dis,0x7f,sizeof(dis)); dis[s]=0;
22     q.push(s); inq[s]=1;
23     while(!q.empty())
24       {
25           int U=q.front();
26           for(ITER it=G[U].begin();it!=G[U].end();it++)
27             if(dis[*it]>dis[U]+1)
28               {
29                 dis[*it]=dis[U]+1;
30                 if(!inq[*it])
31                   {
32                     q.push(*it);
33                     inq[*it]=1;
34                   }
35               }
36           q.pop(); inq[U]=0;
37       }
38 }
39 int main()
40 {
41     scanf("%d%d",&n,&m);
42     for(int i=1;i<=m;i++)
43       {
44           scanf("%d%d",&x[i],&y[i]);
45           rG[y[i]].push_back(x[i]);
46       }
47     scanf("%d%d",&from,&to); dfs(to);
48     for(int i=1;i<=n;i++)
49       if(!can[i])
50         for(ITER it=rG[i].begin();it!=rG[i].end();it++)
51           can[*it]=0;
52     for(int i=1;i<=m;i++)
53       if(can[x[i]]&&can[y[i]])
54         G[x[i]].push_back(y[i]);
55     spfa(from);
56     printf("%d\n",dis[to]>2000000000 ? -1 : dis[to]);
57     return 0;
58 }

【DFS】【最短路】【spfa】【BFS】洛谷P2296 NOIP2014提高组 day2 T2 寻找道路

标签:style   blog   io   color   sp   for   div   on   2014   

原文地址:http://www.cnblogs.com/autsky-jadek/p/4089679.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!