EOJ Monthly 2020.3 B. 与矩阵 - 位运算

矩阵 c[n][n]
数列 a[n]
if c[i][j]的二进制第k位为1
	a[i]和a[j]的二进制第k位为1
else
	a[i]和a[j]的二进制第k位为0
	(为了最小化字典序 可用用反证法加以证明)
#include 
#include 
#include 

using namespace std;
#define debug(x) cout<<#x<<(x)<

int arr[1000];

int main()
{
    int n;
    scanf("%d",&n);
    memset(arr,0,sizeof(arr));

    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            int aij;
            scanf("%d",&aij);
            for(int w=0;w<32;w++){
                if( aij &(1<<w) ){
                    arr[i] |= (1<<w);
                    arr[j] |= (1<<w);
                }
            }
        }
    }
    for(int i=0;i<n;i++){
        printf("%d%c",arr[i],i==n-1?'\n':' ');
    }
    return 0;
}

EOJ Monthly 2020.3 B. 与矩阵 - 位运算_第1张图片

你可能感兴趣的:(#,other)