简单题 并查集找下就行

1 #include <iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<stdlib.h> 6 #include<vector> 7 using namespace std; 8 #define LL long long 9 int fa[110]; 10 int w[110][110],o[110][110]; 11 char s[110][110]; 12 int find(int x) 13 { 14 if(x!=fa[x]) 15 fa[x] = find(fa[x]); 16 return fa[x]; 17 } 18 int main() 19 { 20 int i,j,n,a,d; 21 LL sum=0; 22 scanf("%d",&n); 23 scanf("%d%d%*c",&d,&a); 24 for(i = 1; i <= n ; i++) 25 fa[i] = i; 26 for(i = 1; i <= n ; i++) 27 for(j = 1; j <= n ; j++) 28 cin>>s[i][j]; 29 for(i = 1 ;i <= n ; i++) 30 for(j = i+1 ; j <= n ; j++) 31 { 32 if(s[i][j]=='1') 33 { 34 int tx = find(i); 35 int ty = find(j); 36 if(tx==ty) 37 { 38 o[i][j] = 1; 39 o[j][i] = 1; 40 if(!w[i][j]) 41 { 42 w[i][j] = w[j][i] = 1; 43 sum+=d; 44 } 45 } 46 else 47 fa[tx] = ty; 48 } 49 } 50 int t = 0; 51 for(i = 1 ;i <= n ; i++) 52 { 53 if(fa[i]==i) 54 { 55 if(t) 56 { 57 o[t][i] = 2; 58 o[i][t] = 2; 59 if(!w[t][i]) 60 { 61 w[t][i] = w[i][t] = 1; 62 sum+=a; 63 } 64 } 65 t = i; 66 } 67 } 68 printf("%lld ",sum); 69 for(i = 1; i <= n ; i++) 70 { 71 for(j = 1; j <= n ;j++) 72 { 73 if(o[i][j]==1) 74 printf("d"); 75 else if(o[i][j]==2) 76 printf("a"); 77 else 78 printf("0"); 79 } 80 puts(""); 81 } 82 return 0; 83 }