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;
}

posted @ 2022-03-29 16:17  wzx_believer  阅读(67)  评论(0)    收藏  举报