社区讨论

10pts求调

P2559[AHOI2002] 哈利·波特与魔法石参与者 2已保存回复 2

讨论操作

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

当前回复
2 条
当前快照
1 份
快照标识符
@m2chcfqe
此快照首次捕获于
2024/10/17 07:05
去年
此快照最后确认于
2025/11/04 17:02
4 个月前
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;
const int INF=2e9;
int h[8]={0,2,6,4,8,6,10,14};
int s[8],i,j,c,cur,zj;
int mp[110][110];
int dis[110];
bool vis[110];
int main(){
	memset(mp,INF,sizeof(mp));
	for(int p=1;p<=105;p++) mp[p][p]=0;
	memset(dis,INF,sizeof(dis));
	for(int i=1;i<=7;i++){
		scanf("%d",&s[i]);
		if(s[i]) h[i]/=2;
	}
	
	scanf("%d %d %d",&i,&j,&c);
	int u,v,w;
	for(int k=0;k<c;k++){
		scanf("%d %d %d",&u,&v,&w);
		if(mp[u][v]>h[w]) mp[u][v]=h[w],mp[v][u]=h[w];
	}
	dis[i]=0, cur=i, vis[cur]=true;
	
	while(true){
		for(int p=1;p<=105;p++)
			if(!vis[p] and mp[cur][p]!=INF)
				if(dis[p]>dis[cur]+mp[cur][p])
					dis[p]=dis[cur]+mp[cur][p];
		
		
		zj=INF;
		for(int p=1;p<=105;p++)
			if(!vis[p] and dis[p]<zj) 
				zj=dis[p],cur=p;
		
		if(zj==INF) break;
		vis[cur]=true;
	}
	cout<<dis[j];
	return 0;
}

回复

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

正在加载回复...