仔细看了很多遍,这明摆的没什么问题,样例也过了,为什么前三点是WA

P1744 采购特价商品

@[caojiaming](/user/775551) 有没有一种可能,起点是点 $s$,而不是点 $1$
by Natori @ 2023-06-19 16:17:23


@[caojiaming](/user/775551) 改完就过了 ```cpp #include <bits/stdc++.h> using namespace std; struct edge{ int to; double w; }; double distan(int x1,int y1,int x2,int y2) { double a1=abs(x1-x2); double a2=abs(y1-y2); return sqrt(a1*a1+a2*a2); } int n,m,s,t; int x[110],y[110]; vector<edge> a[110]; double dis[110]; bool book[110]; signed main() { cin>>n; for(int i=1;i<=n;i++) { scanf("%d%d",&x[i],&y[i]); } cin>>m; for(int i=1;i<=m;i++) { int u,v; scanf("%d%d",&u,&v); a[u].push_back(edge{v,distan(x[u],y[u],x[v],y[v])}); a[v].push_back(edge{u,distan(x[u],y[u],x[v],y[v])}); } cin>>s>>t; for(int i=1;i<s;i++) dis[i]=1e9; for(int i=s+1;i<=n;i++) dis[i]=1e9; queue<int> q; /*这三行*/ q.push(s); dis[s]=0; book[s]=1; /**/ while(!q.empty()) { int v=q.front(); q.pop(); book[v]=0; for(int i=0;i<a[v].size();i++) { int u=a[v][i].to; if(dis[u]>dis[v]+a[v][i].w) { dis[u]=dis[v]+a[v][i].w; if(!book[u]) { book[u]=1; q.push(u); } } } } printf("%.2lf",dis[t]); return 0; } ```
by Natori @ 2023-06-19 16:18:40


大佬nb
by sans_001 @ 2023-07-17 11:41:30


|