80分求助
查看原帖
80分求助
1127126
yueyan_WZF楼主2024/5/25 12:02

为什么#10和#13一直WA

#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> ll;
struct node{
	int nxt,to;
	long long w;
}z[50050];
int h[5060],vis[5500],dis[5050];
long long lo[5550];
int n,m;
int cnt=0;
void add(int u,int v,int w){
	cnt++;
	z[cnt].to=v;
	z[cnt].nxt=h[u];
	z[cnt].w=w;
	h[u]=cnt;
}
void diji(){
	memset(dis,0x3f3f3f3f,sizeof(dis));
	memset(vis,0,sizeof(vis));
//	memset(lo,0x3f3f,sizeof(lo));
	dis[1]=0;
	priority_queue<ll,vector<ll>,greater<ll> > q;
	q.push(make_pair(0,1));
	lo[1]=0;
	//cout<<endl<<endl;
	while(!q.empty()){
		int x=q.top().second;
		//cout<<x<<endl;
		q.pop();
	//	if(vis[x]==1) continue;
		//else{
	//		vis[x]=1;
	//	}
		for(int i=h[x];i;i=z[i].nxt){
			int y=z[i].to;
			long long w=z[i].w;
			if(dis[y]+lo[y]>dis[x]+w+max(w,lo[x])){
				//cout<<x<<" "<<y<<": "<<lo[y]+dis[y];
				//cout<<" "<<dis[x]+w+max(w,lo[x])<<endl;
				dis[y]=dis[x]+w;
				if(lo[y]!=0){
					lo[y]=min(lo[y],max(w,lo[x]));
				
				}
				else{
					lo[y]=max(w,lo[x]);
				}
			//	cout<<x<<" "<<y<<": "<<lo[y];
			//	cout<<" "<<dis[y]<<endl;
				q.push(make_pair(-dis[y],y));
			}
		}
	} 
}
int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;i++){
		int u,v;
		long long w;
		scanf("%d%d%lld",&u,&v,&w);
		lo[v]=max(lo[v],w);
		add(u,v,w);
		add(v,u,w);
	}
	diji();
//	cout<<lo[n]<<" ";
	printf("%d",dis[n]+lo[n]);
}
2024/5/25 12:02
加载中...