SPFA 90分求助!
  • 板块P1396 营救
  • 楼主xiaoshumiao
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/11/28 17:22
  • 上次更新2023/11/28 17:54:10
查看原帖
SPFA 90分求助!
1008513
xiaoshumiao楼主2023/11/28 17:22
#include<cstdio>
#include<queue>
using namespace std;
const int MAXN=10005,MAXM=20005,INF=0x3f3f3f3f;
int head[MAXN],d[MAXN],cnt;
bool vis[MAXN];
struct Edge {
  int end,next,val;
}edge[MAXM];
int mymax(int a,int b) {
  return (a>b?a:b);
}
void add(int u,int v,int w) {
  edge[++cnt].next=head[u];
  edge[cnt].end=v;
  edge[cnt].val=w;
  head[u]=cnt;
}
void SPFA(int n,int s) {
  for(int i=1;i<=n;i++)
    d[i]=INF;
  d[s]=0;
  queue<int>q;
  q.push(s);
  vis[s]=true;
  while(!q.empty()) {
    int k=q.front();
    q.pop();
    vis[k]=false;
    for(int i=head[k];i!=0;i=edge[i].next) {
      if(mymax(d[k],edge[i].val)<d[edge[i].end]) {
        d[edge[i].end]=mymax(d[k],edge[i].val);
        if(!vis[edge[i].end]) {
          vis[edge[i].end]=true;
          q.push(edge[i].end);
        }
      }
    }
  }
}
int main() {
  int n,m,s,t;
  scanf("%d %d %d %d",&n,&m,&s,&t);
  for(int i=1,u,v,w;i<=m;i++) {
  	scanf("%d %d %d",&u,&v,&w);
  	add(u,v,w);
  	add(v,u,w);
  }
  SPFA(n,s);
  printf("%d",d[t]);
  return 0;
}

错在哪里了?

2023/11/28 17:22
加载中...