社区讨论

P6145 玄关求调

P6145[USACO20FEB] Timeline G参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@m58zme4n
此快照首次捕获于
2024/12/29 10:24
去年
此快照最后确认于
2024/12/29 15:16
去年
查看原帖
码风优良 简洁易懂
程序的思路很清晰 但是就是不知道哪个细节出了点问题
求调
CPP
#include<bits/stdc++.h>
using namespace std;
const int MAXN=200009;
int n,m,c;
int sum,ans[MAXN],in[MAXN];
int s[MAXN],head[MAXN];
struct edge{
	int next;
	int to;
	int h;
}d[MAXN];
void add(int u,int v,int w){
	d[++sum].next=head[u];
	d[sum].to=v;
	d[sum].h=w;
	head[u]=sum;
}
queue<int> q;
int main(){
	cin>>n>>m>>c;
	for(int i=1;i<=n;i++){
		cin>>s[i];
	}
	for(int i=1;i<=c;i++){
		int a,b,x;
		cin>>a>>b>>x;
		in[b]++;
		add(a,b,x);
	}
	for(int i=1;i<=n;i++){
		if(in[i]==0){
			q.push(i);
		}
	}
	while(q.empty()){
		int k=q.front();
		q.pop();
		for(int i=head[k];i;i=d[i].next){
			int s=d[i].to;
			ans[s]=max(ans[s],ans[k]+d[i].h);
			in[s]--;
			if(in[s]==0){
				q.push(s);
			}
		}
	}
	for(int i=1;i<=n;i++){
		cout<<ans[i]<<endl;
	}
	return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...