社区讨论

求调30ptsRE

学术版参与者 2已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@mhjlcy6u
此快照首次捕获于
2025/11/04 04:27
4 个月前
此快照最后确认于
2025/11/04 04:27
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
const double eps=1e-9;
int f[1000005];
double g[100005];
int get(int x)
{
    if(x==f[x])return x;
    int t=get(f[x]);
    g[x]*=g[f[x]];
    return f[x]=t;
}
bool eq(double x,double y)
{
    return fabs(x-y)<eps;
}
int main(){
    int t;
    cin>>t;
    int tt=t;
    while(t--)
    {
        int n,m;
        cin>>n>>m;
        for(int i=1;i<=n;i++){
            f[i]=i;
            g[i]=1;
        }
        cout<<"Case #"<<tt-t<<": ";        
        bool flag=1;
        for(int i=1;i<=m;i++)
        {
            int u,v;
            double x,y;
            cin>>u>>v>>x>>y;
            int f1=get(u),f2=get(v);
            if(f1==f2)
            {
                if(!eq(g[u]/g[v],x/y))
                {
                    flag=0;
                    break;
                }
            }
            f[f2]=f1;
            g[f2]*=g[u]/g[v]*y/x;
        }
        if(!flag)cout<<"No\n";
        else cout<<"Yes\n";
    }
    return 0;
}

回复

3 条回复,欢迎继续交流。

正在加载回复...