RE求助
查看原帖
RE求助
250036
Authentic_k楼主2021/7/15 06:59

是不是模数为0导致的,该怎么解决?求助dalao

https://www.luogu.com.cn/record/53167226

#include<bits/stdc++.h>
using namespace std;
int head[1100000],nxt[1100000],to[1100000],edge[1100000],fa[1100000];
int tot,cnt=0;
int mid[1100000],way[1100000],anss[1100000];
double ans=999999999;
int find(int a)
{
	if(fa[a]!=a) return find(fa[a]);
	return a;
}
void add(int u,int v,int w)
{
	 tot++;
	 to[tot]=v;
	 nxt[tot]=head[u];
	 edge[tot]=w;
	 head[u]=tot;
}
int gcd(int x,int y)
{
	if(x%y==0) return y;
	else return gcd(y,x%y);
}
void search()
{
	 for(int i=1;i<=cnt;i++)
	 {
	 	mid[i]=way[i];
	 }
	 sort(mid+1,mid+1+cnt);
     if(ans>=mid[cnt]/mid[1]) 
     {
     	ans=mid[cnt]/mid[1];
     	anss[1]=mid[cnt];
     	anss[2]=mid[1];
     }
	 
}
void dfs(int k,int fa,int tar)
{
	 for(int i=head[k];i;i=nxt[i])
	 {
	 	 int go=to[i];
	 	 if(go==fa) continue;
	 	 way[++cnt]=edge[i];
	     if(go==tar)
	     {
	     	search();
	     }
	 	 dfs(go,k,tar);
	 	 cnt--;
	 }
}
int main()
{
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=n;i++) fa[i]=i;
	for(int i=1;i<=m;i++)
	{
		int lai,qu,v;
		cin>>lai>>qu>>v;
		int fa1=find(lai),fa2=find(qu);
		if(fa1!=fa2) fa[fa1]=fa2;
		add(lai,qu,v);
		add(qu,lai,v);
	}
	int st,ed;
	cin>>st>>ed;
	int fat=find(st),fad=find(ed);
	if(fat!=fad)
	{
		cout<<"IMPOSSIBLE";
		return 0;
	}
	 dfs(st,st,ed);
	 int yue=gcd(anss[1],anss[2]);
	 if(anss[1]%anss[2]==0) cout<<anss[1]/anss[2];
	 else cout<<anss[1]/yue<<"/"<<anss[2]/yue;
} 
2021/7/15 06:59
加载中...