hdu 1285 确定比赛名次(拓扑排序)
拓扑排序模板:总算手动写了一下,感谢cf
(ps:下次学习带队列优化的)
#include <bits/stdc++.h> using namespace std; int mp[505][505]; int num[505],vis[505]; int main() { int n,m; while(~scanf("%d%d",&n,&m)){ memset(mp,0,sizeof(mp)); memset(num,0,sizeof(num)); memset(vis,0,sizeof(vis)); for(int i=0;i<m;i++){ int t1,t2; scanf("%d%d",&t1,&t2); if(!mp[t1][t2]){ mp[t1][t2]=1; num[t2]++; } } // for(int i=1;i<=n;i++){ // printf("%d == %d\n",i,num[i]); // } // puts(""); for(int i=1;i<=n;i++){ int j=1; while(num[j]!=0)j++; // printf("test %d %d\n",j,num[j]); num[j]--; vis[i]=j; // printf("vis[%d] == %d %d\n",i,j,num[j]); for(int k=1;k<=n;k++){ if(mp[j][k])num[k]--; } } for(int i=1;i<=n;i++){ if(i>1)printf(" "); printf("%d",vis[i]); } puts(""); } return 0; }