求助SPFA 0分

P1828 [USACO3.2] 香甜的黄油 Sweet Butter

@[Maysoul](/user/409774) ```cpp if(cnt[eto]>=n) { return; } ``` ?
by AkeuchiTsuzuri @ 2023-05-05 16:03:19


@[Maysoul](/user/409774) ```cpp //2023/5/5 //别着急,先通读一遍题目 //别忘了开long long //写完先看一遍怎么降复杂度 //要么开全局变量要么给定初值 //想想看,有什么情况需要特判 //std::ios::sync_with_stdio(false), cin.tie(0), cout.tie(0); #include<bits/stdc++.h> #define int long long using namespace std; const int MAXN=1e6+10; const int INF=0x3f3f3f3f; int num=INF,ans,m,s,t; int head[11000]; int escnt; struct linkstar{ int to,from; int w; int next; }edge[11000]; void add(int from,int to,int w) { edge[++escnt].from=from; edge[escnt].to=to; edge[escnt].w=w; edge[escnt].next=head[from]; head[from]=escnt; } int dis[11000]; bool vis[11000]; int cnt[11000]; queue<int> que; int n; void SPFA(int sid) { for (int i=1;i<=n;i++) { dis[i]=INF; } memset(vis,false,sizeof(vis)); dis[sid]=0; vis[sid]=1; que.push(sid); while(!que.empty()) { int cp=que.front(); que.pop(); vis[cp]=false; for (int i=head[cp];i!=-1;i=edge[i].next) { int eto=edge[i].to; int ew=edge[i].w; if(dis[eto]>dis[cp]+ew) { dis[eto]=dis[cp]+ew; cnt[eto]=cnt[cp]+1; if(!vis[eto]) { que.push(eto); vis[eto]=true; } } } } } int d[10000],p; signed main() { memset(head,-1,sizeof(head)); cin>>p; cin>>n; cin>>m; for (int i=1;i<=p;i++) { cin>>d[i]; } for (int i=1;i<=m;i++) { int x,y,w; cin>>x>>y>>w; add(x,y,w); add(y,x,w); } for (int i=1;i<=n;i++) { SPFA(i); for (int j=1;j<=p;j++) { ans+=dis[d[j]]; } num=min(num,ans); ans=0; } cout<<num<<endl; return 0; } ```
by AkeuchiTsuzuri @ 2023-05-05 16:04:21


@[L1rs1ngzN1sLyr](/user/529262) cnt是判负环的忘了重置了(
by Maysoul @ 2023-05-05 16:10:23


|