1352:【例4-13】獎金
阿新 • • 發佈:2021-10-31
來道拓撲排序。
#include<iostream> #include<cstdio> #include<cstring> #include<vector> #include<queue> using namespace std; const int N=1e4+5; vector<int> vec[N]; int in[N];//儲存入度 int pay[N]; bool solve(int n){ int cnt=0,inc=0; queue<int> q;//儲存目前入度為0的節點 bool vis[N]; memset(vis,0,sizeof(vis)); while(1){ for(int i=1;i<=n;i++){ if(!in[i]&&!vis[i])q.push(i); } if(q.empty())break; while(!q.empty()){ int t=q.front(); pay[t]+=inc; q.pop(); cnt++; vis[t]=1; for(int i=0;i<vec[t].size();i++) in[vec[t][i]]--; } inc++; } return cnt==n;//若cnt<n,說明圖中有環 } int main(){ int n,m; cin>>n>>m; int a,b; while(m--){ scanf("%d%d",&a,&b); in[a]++; vec[b].push_back(a); } if(solve(n)){ int sum=0; for(int i=1;i<=n;i++)sum+=pay[i]; printf("%d",100*n+sum); }else{ cout<<"Poor Xed"; } return 0; }