HDU 1285 确定比赛名次
题解:裸的topo,注意判重,由于数据升序所以免排序。
#include <cstdio> #include <iostream> using namespace std; #define N 505 int map[N][N],n,m,a,b,in[N],ans[N]; void topo(){ int top=0,i; memset(ans,0,sizeof ans); while(true){ for(i=1;i<=n;i++)if(in[i]==0)break; if(i==n+1)return; in[i]=-1; ans[top++]=i; for(int x=1;x<=n;x++)if(map[i][x])in[x]--; } } int main(){ while(~scanf("%d%d",&n,&m)){ memset(map,0,sizeof map); memset(in,0,sizeof in); for(int i=0;i<m;i++){ scanf("%d%d",&a,&b); if(!map[a][b]){ map[a][b]++; in[b]++; } } topo(); printf("%d",ans[0]); for(int i=1;i<n;i++)printf(" %d",ans[i]); printf("\n"); } }
愿你出走半生,归来仍是少年