思路正确,却 WA 8

P2502 [HAOI2006] 旅行

现在 WA 6
by 鸿海1001 @ 2020-03-21 11:58:00


```cpp #include<stdio.h> #include<algorithm> #include<math.h> using namespace std; const int N=586,M=5086; int n,m,s,t,ans_max=0x3f3f3f3f,ans_min=1; struct node { int x; int y; int v; bool operator <(const node &a)const{ return v<a.v; } }p[M]; int fa[N]; int find(int x){while(x!=fa[x]) x=fa[x]=fa[fa[x]];return x;} void add(int a,int b){fa[find(a)]=find(b);} void kruskal(int k) { for(int i=1;i<=n;i++) fa[i]=i; int tot=0,maxx=0; for(int i=k;i<=m&&tot<n-1&&find(s)!=find(t);i++) { int xx=find(p[i].x),yy=find(p[i].y); if(xx!=yy) fa[xx]=yy,tot++,maxx=p[i].v; } if(find(s)==find(t)&&maxx*1.0/p[k].v<ans_max*1.0/ans_min) { ans_max=maxx; ans_min=p[k].v; } } int main() { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) fa[i]=i; for(int i=1;i<=m;i++) { scanf("%d%d%d",&p[i].x,&p[i].y,&p[i].v); add(p[i].x,p[i].y); } scanf("%d%d",&s,&t); if(find(s)!=find(t)) { printf("IMPOSSIBLE\n"); return 0; } sort(p+1,p+m+1); for(int i=1;i<=n;i++) kruskal(i); if(ans_max%ans_min==0) printf("%d\n",ans_max/ans_min); else printf("%d/%d\n",ans_max/__gcd(ans_max,ans_min),ans_min/__gcd(ans_max,ans_min)); return 0; } ```
by 鸿海1001 @ 2020-03-21 11:58:12


|