L2-4 最短工期 (天梯賽)
阿新 • • 發佈:2022-03-29
比賽的時候沒有把題目讀清楚 導致這麼簡單的一道拓撲排序沒做 屬實有點遺憾
跑一遍拓撲排序 最後統計每個任務如果有沒法執行的就impossible
否則就輸出所有任務花費時間最長的那個
點選檢視程式碼
#include<bits/stdc++.h> using namespace std; #define lowbit(x) x&(-x) #define ll long long const int maxn=105; int n,m,ans; int in[maxn],out[maxn]; int dp[maxn],vis[maxn]; queue<int>q; vector<int>Q[maxn],W[maxn]; int main(){ cin>>n>>m; for(int i=1;i<=m;i++){ int uu,vv,cc; cin>>uu>>vv>>cc; Q[uu].push_back(vv); W[uu].push_back(cc); in[vv]++;out[uu]++; vis[vv]=1; } for(int i=0;i<n;i++) if(!in[i])q.push(i); while(!q.empty()){ int u=q.front(); q.pop(); for(int i=0;i<Q[u].size();i++){ int to=Q[u][i],w=W[u][i]; dp[to]=max(dp[to],dp[u]+w); ans=max(dp[to],ans); in[to]--; if(!in[to])q.push(to); } } for(int i=0;i<n;i++) if(vis[i]&&!dp[i]){ cout<<"Impossible"<<endl; return 0; } if(ans) cout<<ans<<endl; else cout<<"Impossible"<<endl; return 0; }