全WA求调
查看原帖
全WA求调
783336
Earth_Sky楼主2024/5/20 19:59
#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e5+5,MAXM=5e5+5;
bool vis[MAXN];
int h[MAXN],e[MAXM],ne[MAXM],val[MAXM],tot;
int n,m,d[MAXN],d1[MAXN],d2[MAXN],x[MAXM],y[MAXM],v1[MAXM],v2[MAXM];
void add(int u,int v,int dis){
	val[++tot]=dis;
	e[tot]=v;
	ne[tot]=h[u];
	h[u]=tot;
}
void dijkstra(int s){
	priority_queue< pair<int,int> >q;
	memset(d,0x7f,sizeof d);
	memset(vis,0,sizeof vis);
	q.push(make_pair(0,s));d[s]=0;
	while(q.size()){
		int u=q.top().second;q.pop();
		if(vis[u]) continue;
		else vis[u]=1;
		for(int i=h[u];i!=-1;i=ne[i]){
			int v=e[i],dis=val[i];
			if(d[v]>d[u]+dis){
				d[v]=d[u]+dis;
				q.push(make_pair(-d[u],u));
			}
		}
	}
}
int main(){
	ios::sync_with_stdio(NULL);
	cin.tie(0);cout.tie(0);
	cin>>n>>m;
	for(int i=1;i<=m;i++) cin>>x[i]>>y[i]>>v1[i]>>v2[i];
	memset(h,-1,sizeof h);tot=0;
	for(int i=1;i<=m;i++) add(y[i],x[i],v1[i]);
	dijkstra(n);for(int i=1;i<=n;i++) d1[i]=d[i];
	memset(h,-1,sizeof h);tot=0;
	for(int i=1;i<=m;i++) add(y[i],x[i],v2[i]);
	dijkstra(n);for(int i=1;i<=n;i++) d2[i]=d[i];
	memset(h,-1,sizeof h);tot=0;
	for(int i=1;i<=m;i++){
		int cnt=0;
		if(d1[x[i]]!=d1[y[i]]+v1[i]) cnt++;
		if(d2[x[i]]!=d2[y[i]]+v2[i]) cnt++;
		add(y[i],x[i],cnt);
	}
	dijkstra(1);
	cout<<d[n];

	return 0;
}

不知道为什么总是输出0x7f7f7f7f(十进制下的这个数)

2024/5/20 19:59
加载中...