2 条题解

  • 0
    @ 2025-10-8 16:58:57
    #include <bits/stdc++.h>
    using namespace std;
    int f[110000], cntodd[110000], cntsum[110000], rd[110000];
    int findfa(int x){ return f[x]=(f[x]==x?f[x]:findfa(f[x]));}
    int main()
    {
        int n, m;
        while(scanf("%d%d", &n, &m)!=EOF)
        {
            
            memset(rd, 0, sizeof(rd));
            for(int i=1;i<=n;i++)f[i]=i;
            for(int i=1;i<=m;i++)
            {
                int x, y;scanf("%d%d", &x, &y);rd[x]++, rd[y]++;
                f[findfa(x)]=findfa(y);
            }
            memset(cntodd, 0, sizeof(cntodd));
            memset(cntsum, 0, sizeof(cntsum));
            for(int i=1;i<=n;i++)
            {
                cntsum[findfa(i)]++;
                if(rd[i] & 1)cntodd[findfa(i)]++;
            }
            int ans=0;
            for(int i = 1; i <= n; i++)if(f[i]==i)
            {
                if(cntsum[i]==1) continue;
                if(cntodd[i]==0) ans++;
                else             ans+=cntodd[i] / 2;
            }
            printf("%d\n", ans);
        }
        return 0;
    }
    
    • 0
      @ 2025-10-8 16:58:49
      #include <bits/stdc++.h>
      using namespace std;
      int f[110000],cntodd[110000],cntsum[110000],rd[110000];
      int findfa(int x){ return f[x]=(f[x]==x?f[x]:findfa(f[x]));}
      int main()
      {
      	int n,m;
      	while(scanf("%d%d",&n,&m)!=EOF)
      	{
      		
      		memset(rd,0,sizeof(rd));
      		for(int i=1;i<=n;i++)f[i]=i;
      		for(int i=1;i<=m;i++)
      		{
      			int x,y;scanf("%d%d",&x,&y);rd[x]++,rd[y]++;
      			f[findfa(x)]=findfa(y);
      		}
      		memset(cntodd,0,sizeof(cntodd));
      		memset(cntsum,0,sizeof(cntsum));
      		for(int i=1;i<=n;i++)
      		{
      			cntsum[findfa(i)]++;
      			if(rd[i] & 1)cntodd[findfa(i)]++;
      		}
      		int ans=0;
      		for(int i = 1; i <= n; i++)if(f[i]==i)
      		{
      			if(cntsum[i]==1) continue;
      			if(cntodd[i]==0) ans++;
      			else             ans+=cntodd[i] / 2;
      		}
      		printf("%d\n",ans);
      	}
      	return 0;
      }
      • 1

      *【欧拉路径(难度:8)】几笔画问题[Ant Trip]

      信息

      ID
      1863
      时间
      1000ms
      内存
      32MiB
      难度
      10
      标签
      递交数
      5
      已通过
      3
      上传者