题目链接:http://codeforces.com/contest/1230/problem/C
题意:
有21 个多米诺骨牌,给定一个无向图(无自环,无重边),一条边上可以放一个多米诺骨牌。如果两条边连接同一个顶点,那就必须使这两条边上指向这个顶点的多米诺骨牌的值相等,问给定的图中最多可以放多少个多米诺骨牌。
题解:
**当n<7时,每个节点对应一个数,可放置的骨牌即为m。
**当n=7时,此时多出了一个节点,那么还有一个节点必定要放重复的数,节点个数很少吗,故我们可以三重循环,cnt记录有多少个k点连接了 ki,kj 俩边,找出最少的一种情况减掉这些边就是结果。
1 #include<bits/stdc++.h> 2 using namespace std; 3 4 int a[100100],b[100100],c[10][10]; 5 6 int main() 7 { 8 int n,m; 9 scanf("%d%d",&n,&m); 10 for(int i=0;i<m;i++){ 11 scanf("%d%d",&a[i],&b[i]); 12 c[a[i]][b[i]]=c[b[i]][a[i]]=1; 13 } 14 if(n<7) printf("%d\n",m); 15 else { 16 int cnt=0,ans=0x3f3f3f; 17 for(int i=1;i<=7;i++){ 18 for(int j=i+1;j<=7;j++){ 19 cnt=0; 20 for(int k=1;k<=7;k++) 21 if(c[k][i]&&c[k][j]) cnt++; 22 ans=min(ans,cnt); 23 } 24 } 25 printf("%d\n",m-ans); 26 } 27 return 0; 28 }