救~我~
  • 板块P1364 医院设置
  • 楼主Igallta
  • 当前回复11
  • 已保存回复11
  • 发布时间2023/10/14 10:47
  • 上次更新2023/11/2 13:58:20
查看原帖
救~我~
813622
Igallta楼主2023/10/14 10:47
#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
using namespace std;
int n,v[101],g[101][101];
struct temp{
	int r1,r2;
}tmp[101];
signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>n;
	for(int i=1;i<=n;i++){
		int u,v1,w;
		cin>>u>>v1>>w;
		//记录关系 
		v[i]=u;
		tmp[i].r1=v1;
		tmp[i].r2=w;
	}
	//初始化 
	memset(g,0x3f,sizeof g);
	for(int i=1;i<=n;i++){
		//存储关系
		if(tmp[i].r1!=0){//是否有连边 
			g[i][tmp[i].r1]=v[i];//使用人员个数当做边权 
			g[tmp[i].r1][i]=v[tmp[i].r1];
//			cout<<"test out:"<<i<<' '<<tmp[i].r1<<' '<<v[i]<<' '<<v[tmp[i].r1]<<'\n';
		}
		if(tmp[i].r2!=0){
			g[i][tmp[i].r2]=v[i];
			g[tmp[i].r2][i]=v[tmp[i].r2];		
//			cout<<"test out:"<<i<<' '<<tmp[i].r2<<' '<<v[i]<<' '<<v[tmp[i].r2]<<'\n';
		}
	}
	//最短路(floyd)
	for(int k=1;k<=n;k++){
		for(int i=1;i<=n;i++){
			for(int j=1;j<=n;j++){
				if( i!=j && g[i][k] != inf && g[k][j] != inf && g[i][j]>g[i][k]+g[k][j]){
//					cout<<i<<' '<<j<<' '<<k<<' '<<g[i][k]+g[k][j]<<'\n';
					g[i][j]=g[i][k]+g[k][j];
				}
			}
		}
	} 
	//打擂台 
	int minn=inf;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			minn=min(minn,g[i][j]);
		}
	}
	cout<<minn;
}
2023/10/14 10:47
加载中...