标签:不同 script tor 之间 比赛 add int 排队 拓扑
#include<bits/stdc++.h> #define INF 0x3f3f3f3f #define me(a,b) memset(a,b,sizeof(a)) #define N 5100 typedef long long ll; using namespace std; int in[N],head[N],n,m,cnt,s,e; priority_queue<int,vector<int>,greater<int> > q; vector<int> ans; struct co { int e,pre; }mp[N]; void init() { me(head,-1); cnt=0; me(in,0); while(!q.empty()) q.pop(); ans.clear(); } void add(int ss,int ee) { mp[cnt].e=ee; mp[cnt].pre=head[ss]; head[ss]=cnt++; } int main() { //freopen("in.txt","r",stdin); while(~scanf("%d%d",&n,&m)) { init(); while(m--) { scanf("%d%d",&s,&e); in[e]++; add(s,e); } for(int i=1;i<=n;i++) { if(in[i]==0) { q.push(i); } } while(!q.empty()) { int f=q.top(); ans.push_back(f); q.pop(); for(int i=head[f]; i!=-1; i=mp[i].pre) { in[mp[i].e]--; if(in[mp[i].e]==0) { q.push(mp[i].e); } } } for(int i=0;i<ans.size();i++) { if(i) cout<<‘ ‘; cout<<ans[i]; } cout<<endl; } }
4857:
#include<bits/stdc++.h> #define INF 0x3f3f3f3f #define me(a,b) memset(a,b,sizeof(a)) #define N 100010 typedef long long ll; using namespace std; int in[30100],head[N],n,m,cnt,s,e; priority_queue<int> q; vector<int> ans; struct co { int e,pre; }mp[N]; void init() { me(head,-1); me(in,0); cnt=0; while(!q.empty()) q.pop(); ans.clear(); } void add(int ss,int ee) { mp[cnt].e=ee; mp[cnt].pre=head[ss]; head[ss]=cnt++; } int main() { //freopen("in.txt","r",stdin); int T; cin>>T; while(T--) { init(); scanf("%d%d",&n,&m); while(m--) { scanf("%d%d",&s,&e); in[s]++; add(e,s); } for(int i=1;i<=n;i++) { if(in[i]==0) { q.push(i); } } while(!q.empty()) { int f=q.top(); ans.push_back(f); q.pop(); for(int i=head[f]; i!=-1; i=mp[i].pre) { in[mp[i].e]--; if(in[mp[i].e]==0) { q.push(mp[i].e); } } } for(int i=ans.size()-1;i>-1;i--) { cout<<ans[i]; if(i) cout<<‘ ‘; } cout<<endl; } }
正向与反向拓扑排序的区别(hdu 1285 确定比赛名次和hdu 4857 逃生)
标签:不同 script tor 之间 比赛 add int 排队 拓扑
原文地址:https://www.cnblogs.com/zgncbsylm/p/10727395.html