90分,第一点WA求调

P2502 [HAOI2006] 旅行

@[Andy_Li](/user/361266) 注意特判 s,t 只需一条边就能联通的情况
by LV06 @ 2022-11-15 21:17:38


@[Gravel](/user/558597) 咋改?
by Andy_Li @ 2022-11-15 21:52:45


60行j从i开始即可 ``` //AC代码 #include <iostream> #include <cstdio> #include <cstdlib> #include <algorithm> #include <cmath> #include <string> #include <cstring> using namespace std; int fa[1000010],vis[100010]; struct node { int x,y,z; }a[1000010]; int find(int x) { if(fa[x]==x) return x; return fa[x]=find(fa[x]); } void make(int x,int y) { int xx=find(x),yy=find(y); if(xx==yy) return ; fa[yy]=xx; } int cmp(node x,node y) { return x.z>y.z; } int main() { // freopen(".in","r",stdin); // freopen(".out","w",stdout); int n,m,s,t,p1=0,p2=0; double ans=100000000; cin>>n>>m; for(int i=1;i<=n;i++) fa[i]=i; for(int i=1;i<=m;i++) { cin>>a[i].x>>a[i].y>>a[i].z; make(a[i].x,a[i].y); } cin>>s>>t; if(fa[s]!=fa[t]) { cout<<"IMPOSSIBLE"; return 0; } for(int i=1;i<=n;i++) fa[i]=i; sort(a+1,a+m+1,cmp); // for(int i=1;i<=m;i++) // cout<<a[i].x<<" "<<a[i].y<<" "<<a[i].z<<endl; for(int i=1;i<m;i++) { int k=0; make(a[i].x,a[i].y); for(int j=i;j<=m;j++) { make(a[j].x,a[j].y); if(find(fa[s])==find(fa[t])) { k=j; break; } } for(int j=1;j<=n;j++) fa[j]=j; if(k==0) continue; if(double(a[i].z*1.0/a[k].z*1.0)<ans) { ans=double(a[i].z*1.0/a[k].z*1.0); p1=a[i].z; p2=a[k].z; } } if(p1%p2==0) cout<<p1/p2; else cout<<p1/(__gcd(p1,p2))<<"/"<<p2/(__gcd(p1,p2)); return 0; } ```cpp
by smqa @ 2022-11-19 12:19:24


@[Andy_Li](/user/361266)
by smqa @ 2022-11-19 12:19:48


@[alpha008](/user/569971) 栓Q
by Andy_Li @ 2022-11-19 12:39:57



by yanbinmu @ 2022-11-20 11:35:25


|