1. 程式人生 > 其它 >L2-4 最短工期 (天梯賽)

L2-4 最短工期 (天梯賽)

比賽的時候沒有把題目讀清楚 導致這麼簡單的一道拓撲排序沒做 屬實有點遺憾

跑一遍拓撲排序 最後統計每個任務如果有沒法執行的就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;
}