蒟蒻刚学OI,代码出错求调
查看原帖
蒟蒻刚学OI,代码出错求调
578628
Undead2008楼主2022/8/9 08:51
#include<bits/stdc++.h>
using namespace std;
#define inf 110
int n,m,s=1,dis[inf],xdis[inf],vis[inf],ans,sp;
struct link{int to,w;};
vector<link>l[inf];
struct node{
	int d,p;
	bool operator < (const node x)const{
		return x.d<d;
	}
};
priority_queue<node>q;
int dijkstra(){
	memset(dis,110,sizeof(dis));
	memset(vis,0,  sizeof(vis));
	dis[s]=0;q.push(node{0,s});
	while(q.size()){
		node t=q.top();q.pop();
		int x=t.p;
		if(vis[x])continue;
		vis[x]=1;
		for(int i=0;i<l[x].size();i++){
			int y=l[x][i].to;
			cout<<"dijkstra:"<<x<<' '<<y<<' '<<l[x][i].w<<endl;
			if(dis[y]>dis[x]+l[x][i].w){
				dis[y]=dis[x]+l[x][i].w;
				if(!vis[y])q.push(node{dis[y],y});
			}
		}
	}
	for(int i=1;i<=n;i++)
		printf("dis %d = %d\n",i,dis[i]);
	return dis[n];
}
void dfs(int x){
	for(int i=0;i<l[x].size();i++){
		int y=l[x][i].to;
		if(xdis[x]==xdis[y]+l[x][i].w){
			cout<<x<<' '<<y<<' '<<l[x][i].w<<endl;
			l[x][i].w*=2;
			cout<<x<<' '<<y<<' '<<l[x][i].w<<endl;
			ans=max(ans,dijkstra());
			l[x][i].w/=2;
			dfs(y);
		}
	}
}
int main(){
	cin>>n>>m;
	for(int i=1,u,v,w;i<=m;i++){
		cin>>u>>v>>w;
		l[u].push_back(link{v,w});
		l[v].push_back(link{u,w});
	}
	sp=dijkstra();
	memcpy(xdis,dis,sizeof xdis);
	dfs(n);
	cout<<ans<<endl;
}

不知道哪里出了问题 最短路长度一直为6 (样例)求大佬调

2022/8/9 08:51
加载中...