題目大意:
給你一個n個點,m條邊的有向圖,然後要你求出一條經過所有點的路徑,輸出第i個點是第幾個經過的。
解題思路:
話說這道題目我看了好久才看懂啊,畢竟英語差啊。。。。。
很水的一道題目,就是一遍拓撲排序就行了,沒什麼可講的了。。。
AC代碼:
#include#include #include #include #include #include #define MAX(a,b) ((a)>(b)?(a):(b)) #define MIN(a,b) ((a)>(b)?(b):(a)) using namespace std; int n,m; struct bian_ { int next; int num; }bian[10010]={{0,0}}; int First[110]={0}; int hash[110]={0}; int du[110]={0}; inline void Add(int p,int q,int k) { bian[k].next=First[p]; bian[k].num=q; First[p]=k; return; } int main() { scanf("%d%d",&n,&m); for(int i=1;i<=m;i++) { int p,q; scanf("%d%d",&p,&q); Add(p,q,i); du[q]++; } int dui[110]={0}; int duip=0; for(int i=1;i<=n;i++) if(du[i]==0) dui[++duip]=i; for(int i=1;i<=duip;i++) { int u=dui[i]; for(int p=First[u];p!=0;p=bian[p].next) { du[bian[p].num]--; if(du[bian[p].num]==0) dui[++duip]=bian[p].num; } } if(duip