luogu P1137 旅行计划
Posted sevenyuanluo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了luogu P1137 旅行计划相关的知识,希望对你有一定的参考价值。
emmmmm
很久很久很久以前加到任务计划里的一道题
终于做了www
所以
这道题还是蛮简单的
大概有一点拓扑排序的思想?
(虽然我到现在也不知道拓扑排序怎么应用23333
唔看一下题面吧
(悄咪咪吐槽一下 改版之后真的丑www
emmmm
怎么讲呢
就是有向的图的遍历吧大概。。。(不靠谱的瞎说请不要盲目相信
上代码了(真草率
#include<cstdio> #include<queue> using namespace std; #define maxn 200010 struct EDGE{ int to,nxt; }edge[maxn]; int head[maxn]; int cnt,d[maxn],vis[maxn]; queue<int>q; void add(int x,int y){ edge[++cnt].to = y; edge[cnt].nxt = head[x]; head[x] = cnt; }//存图 int main(){ int n,m; scanf("%d%d",&n,&m); for(int i = 1;i <= m;i++){ int a,b; scanf("%d%d",&a,&b); add(a,b);//存图,因为分东西所以有向 d[b]++;//d数组记录每个点的入度 } for(int i = 1;i <= n;i++) if(!d[i]){//入度为零可以作为起点遍历 q.push(i);//入队 vis[i] = 1;//走了一个城市 } while(!q.empty()){ int x = q.front();//取队首元素 for(int i = head[x];i;i = edge[i].nxt){ int v = edge[i].to; d[v]--;//入度减一,相当于删边 if(!d[v]){//入度为零 vis[v] = vis[x] + 1;//走过的城市数加一 q.push(v);//入队 } } q.pop();//biu~ } for(int i = 1;i <= n;i++) printf("%d ",vis[i]);//输出 return 0; }
(在此顺道吐槽一下改版后的代码字体,太丑了 |-|
嗯
挺好理解的
以上是关于luogu P1137 旅行计划的主要内容,如果未能解决你的问题,请参考以下文章