WA 30 萌新求助QAQ
查看原帖
WA 30 萌新求助QAQ
367521
roger_yrj楼主2022/9/23 20:48
#include<bits/stdc++.h>
using namespace std;
long long n,m,k,dis[400010],dis1[400010],cnt,vis[400010];
long long fst[400010],nxt[400010],to[400010],val[400010];
void adde(int u,int v,int w){
	cnt++;
	nxt[cnt]=fst[u];
	fst[u]=cnt;
	to[cnt]=v;
	val[cnt]=w;
}
struct node{
	int u,w;
};
priority_queue<node>q;
bool operator<(node x,node y){
	return x.w>y.w;
}
void dijkstra(int s){
	memset(dis,0x7f,sizeof(dis));
	memset(vis,0,sizeof(vis));
	dis[s]=0;
	q.push((node){s,0});
	while(!q.empty()){
		int u=q.top().u;
		q.pop();
		vis[u]=1;
		for(int i=fst[u];i;i=nxt[i]){
			int v=to[i];
			if(!vis[v]&&dis[u]+val[i]<dis[v]){
				dis[v]=dis[u]+val[i];
				q.push((node){v,dis[v]});
			}
		}
	}
}
int main(){
	cin>>n>>m>>k;
	for(int i=1,x,y,z;i<=m;i++){
		scanf("%d%d%d",&x,&y,&z);
		adde(x,y,z);
		adde(y,x,z);
		adde(x+n,y+n,z);
		adde(y+n,x+n,z);
	}
	dijkstra(n);
	for(int i=1;i<n;i++)dis1[i]=dis[i];
	for(int i=1,x,y;i<=k;i++){
		scanf("%d%d",&x,&y);
		adde(x+n,x,-y);
	}
	dijkstra(n+n);
	for(int i=1;i<n;i++){
		if(dis1[i]<dis[i])printf("0\n");
		else printf("1\n");
	}
}
2022/9/23 20:48
加载中...