2 条题解
-
0
-
0
#include<bits/stdc++.h> using namespace std; const int N=510; const int M=5100; struct edge{int x,y,w,pre;}a[M*2];int alen,last[N]; void add(int x,int y,int w){alen++;a[alen]=edge{x,y,w,last[x]};last[x]=alen;} int n,m,fa[N]; int findfa(int x){return fa[x]==x? x : fa[x]=findfa(fa[x]);} bool cmp(edge &a,edge &b){return a.w>b.w;} int main() { int n,m;scanf("%d%d",&n,&m); alen=0;memset(last,0,sizeof(last)); for(int i=1;i<=n;i++) fa[i]=i; for(int i=1,x,y,w;i<=m;i++) { scanf("%d%d%d",&x,&y,&w); add(x,y,w); fa[findfa(x)]=findfa(y); } int st,ed;scanf("%d%d",&st,&ed); if(findfa(st)!=findfa(ed)){puts("IMPOSSIBLE");return 0;} sort(a+1,a+1+alen,cmp); double ans=1e10; int mx,mi; for(int i=1;i<=m;i++) { for(int k=1;k<=n;k++) fa[k]=k; for(int j=i;j<=m;j++) { int x=a[j].x,y=a[j].y; fa[findfa(x)]=findfa(y); if(findfa(st)==findfa(ed)) { double tmp=(1.0*a[i].w)/(1.0*a[j].w); if(tmp<ans) mx=a[i].w,mi=a[j].w,ans=tmp; break; } } } if(mx/mi*mi==mx)printf("%d\n",mx/mi); else printf("%d/%d\n",mx/__gcd(mx,mi),mi/__gcd(mx,mi)); return 0; }
- 1
信息
- ID
- 2703
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 5
- 标签
- 递交数
- 35
- 已通过
- 16
- 上传者