求助
查看原帖
求助
428358
Grisses楼主2022/2/19 16:10
  #include<bits/stdc++.h>
  #define int long long
  using namespace std;
  int t,tot,n,m,cnt,h[1005];
  struct edge{
      int v,nxt;
      double w;
  }e[200005];
  void adde(int u,int v,double w){
      e[++cnt].nxt=h[u];
      h[u]=cnt;
      e[cnt].w=w;
      e[cnt].v=v;
  }
  double dis[1005];
  bool f,vis[1005];
  void dfs(int x,double cnt){
      if(f)return;
      if(vis[x]){
          if(fabs(cnt-dis[x])>1e-4)f=1;
          return;
      }
      vis[x]=1;
      dis[x]=cnt;
      for(int i=h[x];i;i=e[i].nxt){
          dfs(e[i].v,cnt*e[i].w);
          if(f)return;
      }
  }
  signed main()
  {
      scanf("%lld",&t);
      while(t--){
          scanf("%lld%lld",&n,&m);
          memset(vis,0,sizeof(vis));
          memset(dis,0,sizeof(dis));
          f=cnt=0;
          for(int i=1,u,v,x,y;i<=m;i++){
              scanf("%lld%lld%lld%lld",&u,&v,&x,&y);
              adde(u,v,y*1.0/x);
              adde(v,u,x*1.0/y);
          }
          for(int i=1;i<=n;i++){
              if(!vis[i]){
                  dfs(i,1);
                  if(f)break;
              }
          }
          printf("Case #%lld: ",++tot);
          puts(f?"No":"Yes");
      }
      return 0;
  }

样例是过了的,但没分

2022/2/19 16:10
加载中...