社区讨论

LOJ AC luogu WA 10求助

P10927Sightseeing trip参与者 4已保存回复 4

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
4 条
当前快照
1 份
快照标识符
@m08xa0rf
此快照首次捕获于
2024/08/25 10:00
2 年前
此快照最后确认于
2025/11/04 22:30
4 个月前
查看原帖
还有为什么不能 define int long long,然后把 ans 赋值成 1e18?
CPP
#include<bits/stdc++.h>
//#define int long long
using namespace std;
int n,m,u,v,d,dis[101][101],g[101][101],p[101][101],ans=0x3f3f3f3f;
vector<int>path;
void check(int x,int y){
	if(!p[x][y]) return;
	check(x,p[x][y]);
	path.push_back(p[x][y]);
	check(p[x][y],y);
}
int main(){
    cin>>n>>m;
    memset(dis,0x3f,sizeof dis);
    memset(g,0x3f,sizeof g);
    for(int i=1;i<=n;i++){
        dis[i][i]=0;
        g[i][i]=0;
    }
    for(int i=1;i<=m;i++){
        cin>>u>>v>>d;
        dis[u][v]=min(dis[u][v],d);
        dis[v][u]=min(dis[v][u],d);
        g[u][v]=min(g[u][v],d);
        g[v][u]=min(g[v][u],d);
    }
    for(int k=1;k<=n;k++){
        for(int i=1;i<k;i++){
            for(int j=i+1;j<k;j++){
                if((long long)dis[i][j]+g[i][k]+g[k][j]<ans){
                    ans=dis[i][j]+g[i][k]+g[k][j];
                    path.clear();
					path.push_back(i);
					check(i,j);
					path.push_back(j);
					path.push_back(k);
                }
            }
        }
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++){
                if(dis[i][k]+dis[k][j]<dis[i][j]){
                    dis[i][j]=dis[i][k]+dis[k][j];
                    p[i][j]=k;
                }
            }
        }
    }
    if(ans==0x3f3f3f3f) cout<<"No solution.";
    else for(int i=0;i<path.size();i++) cout<<path[i]<<" ";
}

回复

4 条回复,欢迎继续交流。

正在加载回复...