题目链接: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 }