标签:
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)
Total Submission(s): 878 Accepted Submission(s): 442
1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #include <iostream> 5 #include <vector> 6 #include <queue> 7 #include <cmath> 8 #include <set> 9 using namespace std; 10 11 #define N 16 12 #define inf 999999999 13 14 int max(int x,int y){return x>y?x:y;} 15 int min(int x,int y){return x<y?x:y;} 16 int abs(int x,int y){return x<0?-x:x;} 17 18 bool visited[1<<N]; 19 20 main() 21 { 22 int t; 23 int n, m; 24 int map[N][N]; 25 int i, j, k; 26 int x, y; 27 int a[N]; 28 int b[N]; 29 cin>>t; 30 while(t--){ 31 scanf("%d %d",&n,&m); 32 memset(map,0,sizeof(map)); 33 while(m--){ 34 scanf("%d %d",&x,&y); 35 map[x][y]++;map[y][x]++;; 36 } 37 memset(visited,false,sizeof(visited)); 38 int c[N]; 39 c[0]=1; 40 for(i=1;i<n;i++) c[i]=c[i-1]<<1; 41 int cnt=1<<n; 42 int l1, l2; 43 int ans=inf; 44 for(i=0;i<cnt;i++){ 45 l1=l2=0; 46 int num=0; 47 for(j=0;j<n;j++){ 48 if(c[j]&i) a[l1++]=j; 49 else b[l2++]=j; 50 } 51 for(j=0;j<l1;j++){ 52 for(k=j+1;k<l1;k++){ 53 if(map[a[j]][a[k]]) num+=map[a[j]][a[k]]; 54 } 55 } 56 for(j=0;j<l2;j++){ 57 for(k=j+1;k<l2;k++){ 58 if(map[b[j]][b[k]]) num+=map[b[j]][b[k]]; 59 } 60 } 61 ans=min(ans,num); 62 } 63 printf("%d\n",ans); 64 } 65 }
标签:
原文地址:http://www.cnblogs.com/qq1012662902/p/4491504.html