比赛 2025暑期集训第5场图论专场 评测结果 AAAAAAAAAA
题目名称 Timeline 最终得分 100
用户昵称 KKZH 运行时间 1.996 s
代码语言 C++ 内存使用 6.60 MiB
提交时间 2025-07-09 08:41:17
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
const int N=4e5;
int n,m,c,cnt;
int head[N],dis[N],f[N];
struct node1{
	int num,len;
	friend bool operator<(const node1 a,const node1 b){
		return a.len<b.len;
	}
};
priority_queue <node1> q;
struct node{
	int next,to,len;
}ed[N];
void add(int x,int y,int z){
	ed[++cnt].next=head[x];
	ed[cnt].to=y;
	ed[cnt].len=z;
	head[x]=cnt;
}
void dij(){
	dis[0]=0;
	q.push({0,0});
	while(!q.empty()){
		int x=q.top().num;
		q.pop();
		for(int i=head[x];i!=-1;i=ed[i].next){
			int y=ed[i].to,z=ed[i].len;
			if(dis[y]<dis[x]+z){
				dis[y]=dis[x]+z;
				q.push({y,dis[y]});
			}
		}
	}
}
int main(){
	freopen("usaco_Feb_timeline.in","r",stdin);
	freopen("usaco_Feb_timeline.out","w",stdout);
	memset(head,-1,sizeof(head));
	cin>>n>>m>>c;
	int x,y,z;
	for(int i=1;i<=n;i++){
		cin>>x;
		add(0,i,x);
	}
	for(int i=1;i<=c;i++){
		cin>>x>>y>>z;
		add(x,y,z);
	}
	dij();
	for(int i=1;i<=n;i++) cout<<dis[i]<<endl;
	return 0;
}