求助!关于数据范围

P2502 [HAOI2006] 旅行

附上代码 ```cpp #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N=1100,M=1e4+5; int n,m,f[N],u,v,w,s,t; int tot,ans1,ans2; double k,ans=1e9; bool vis[N]; struct node{ int u,v,w; }a[M]; int find(int s){ if(s!=f[s]) f[s]=find(f[s]); return f[s]; } bool cmp(node a,node b){ return a.w<b.w; } int gcd(int a,int b){ if(!b)return a; return gcd(b,a%b); } int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=n;i++)f[i]=i,vis[i]=1; for(int i=1;i<=m;i++){ scanf("%d%d%d",&u,&v,&w); a[i].u=u,a[i].v=v,a[i].w=w; if(find(u)!=find(v))f[find(u)]=find(v); } scanf("%d%d",&s,&t); if(find(s)!=find(t)){ printf("IMPOSSIBLE"); return 0; } for(int i=1;i<=m;i++){ if(find(i)!=find(s))vis[i]=0; } sort(a+1,a+1+m,cmp); for(int i=m;i>=1;i--){ if(!vis[a[i].u]||!vis[a[i].v])continue; for(int j=1;j<=n;j++)f[j]=j; int l=a[i].w,r=0,num=0; for(int j=i;j>=1;j--){ u=a[j].u,v=a[j].v; if(!vis[u]||!vis[v])continue; if(find(u)==find(v))continue; f[find(u)]=find(v); if(find(s)==find(t)){ r=a[j].w; break; } } if(r){ k=double(l)/double (r); if(k<ans){ ans=k; ans1=r,ans2=l; } }else break; } k=gcd(ans1,ans2); if(k==ans1)printf("%d",ans2/ans1); else printf("%d/%d",ans2/int(k),ans1/int(k)); return 0; }
by strange757 @ 2022-03-15 21:39:43


```cpp for(int i=1;i<=m;i++){ if(find(i)!=find(s))vis[i]=0; } ``` 改成 $n$ 就好了。
by sleeping_crawlers @ 2022-03-15 22:04:33


@[strange757](/user/265453)
by sleeping_crawlers @ 2022-03-15 22:05:22


@[sleeping_crawlers](/user/148404) 非常感谢!!
by strange757 @ 2022-03-15 22:11:58


|