蒟蒻20分求调教
查看原帖
蒟蒻20分求调教
754502
_AyachiNene楼主2023/3/24 20:40
#include<bits/stdc++.h>
using namespace std;
struct node
{
	int val,to,nxt,true_val=0;   //val是边的权值,true_val是损坏的边需要加的权值 
}a[114514*4];
priority_queue<pair<int,int> >q;
int n,m,head[114514],cnt,d,dist[114514],A,B,vis[114514];
void add(int x,int y,int z)     
{
	a[++cnt].val=z;
	a[cnt].to=y;
	a[cnt].nxt=head[x];
	head[x]=cnt;
}
void del(int x,int y)    //把损坏的边权值加上 
{
	for(int i=head[x];i;i=a[i].nxt)
		if(a[i].to==y)
		{
			a[i].true_val=a[i].val;
			break;
		}
}
void djs()          
{
	for(int i=1;i<=n;i++)
		dist[i]=1e9;
	dist[A]=0;
	q.push(make_pair(0,A));
	while(!q.empty())
	{
		int x=q.top().second;
		q.pop();
		if(vis[x])
			continue;
		vis[x]=1;
		for(int i=head[x];i;i=a[i].nxt)
		{
			int y=a[i].to;
			if(dist[y]>dist[x]+a[i].true_val&&!vis[y])
				dist[y]=dist[x]+a[i].true_val,q.push(make_pair(-dist[y],y));
		}
	}
}
int main()
{
	cin>>n>>m;
	for(int i=1;i<=m;i++)
	{
		int u,v,w;
		cin>>u>>v>>w;
		add(u,v,w);
	}
	cin>>d;
	for(int i=1;i<=d;i++)
	{
		int u,v;
		cin>>u>>v;
		del(u,v);
	}
	cin>>A>>B;
	djs();
	cout<<dist[B];
}
2023/3/24 20:40
加载中...