社区讨论
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 条回复,欢迎继续交流。
正在加载回复...