1 条题解

  • 0
    @ 2025-11-30 16:28:07

    C :

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int G[101][101];
    int degree_o[101];
    int degree_i[101];
    int n, m;
    
    int main()
    {
        while(scanf("%d%d",&n,&m) != EOF){
            memset(G,0,sizeof(G));
            memset(degree_o,0,sizeof(degree_o));
            memset(degree_i,0,sizeof(degree_i));
            for(int i = 0;i < m; i++){
                int a, b;
                scanf("%d%d",&a,&b);
                G[a][b] = 1;
            }
            for(int i = 1;i <= n; i++)G[i][i] = 1;
            for(int k = 1;k <= n; k++){
                for(int u = 1;u <= n; u++){
                    for(int v = 1;v <= n; v++){
                        if(G[u][k]==1 && G[k][v]==1 && u != v){
                            G[u][v] = 1;
                        }
                    }
                }
            }
            for(int u = 1;u <= n; u++){
                for(int v = 1;v <= n; v++){
                    if(u!=v && G[u][v]){
                        degree_o[u]++;
                        degree_i[v]++;
                    }
                }
            }
            int ans = 0;
            for(int i = 1;i <= n; i++){
                if(degree_o[i] >= (n+1)/2 || degree_i[i] >= (n+1)/2){
                    ans++;
                }
            }
            printf("%d\n",ans);
        }
        return 0;
    }
    

    C++ :

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    using namespace std;
    int n,m,tot=0,a[100][100],b[100][100];//a[i][j]数组为1表示i比j重,b[i][j]表示i比j轻 
    void init();
    void work();
    int main()
    {
    	init();
    	work();
    	return 0;
    }
    void init()
    {
    	memset(a,0,sizeof(a));
    	memset(b,0,sizeof(b));
    	cin>>n>>m;
    	int x,y;
    	for(int i=1;i<=m;i++)
    	{
    		cin>>x>>y;
    		a[x][y]=1;
    		b[y][x]=1;
    	}
    }
    void work()
    {
    	for(int k=1;k<=n;k++)
    		for(int i=1;i<=n;i++)
    			for(int j=1;j<=n;j++)
    			{
    				if(a[i][k]==1&&a[k][j]==1&&i!=j)a[i][j]=1;
    				if(b[i][k]==1&&b[k][j]==1&&i!=j)b[i][j]=1;
    			}
    	for(int i=1;i<=n;i++)
    		for(int j=1;j<=n;j++)
    		{
    			if(a[i][j]) a[i][0]++;
    			if(b[i][j]) b[i][0]++;
    		}
    	for(int i=1;i<=n;i++)
    	{
    		if(a[i][0]>=(n+1)/2) tot++;
    		if(b[i][0]>=(n+1)/2) tot++;
    	}
    	cout<<tot<<endl;
    }
    
    • 1

    信息

    ID
    1452
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者