题目链接:https://codeforces.com/contest/1230/problem/C
思路:暴搜,,,,赛后一遍过,为啥当时没想到。
1 #include<iostream> 2 #include<cstdio> 3 #include<ctime> 4 #include<cstring> 5 #include<cstdlib> 6 #include<cmath> 7 #include<queue> 8 #include<stack> 9 #include<map> 10 #include<algorithm> 11 #define Max(a,b) ((a)>(b)?(a):(b)) 12 #define Min(a,b) ((a)<(b)?(a):(b)) 13 #define Mem0(x) memset(x,0,sizeof(x)) 14 #define Mem1(x) memset(x,-1,sizeof(x)) 15 #define MemX(x) memset(x,0x3f,sizeof(x)) 16 using namespace std; 17 typedef long long ll; 18 const int inf=0x3f3f3f; 19 const double pi=acos(-1.0); 20 21 int cnt[30][30]; 22 struct node{ 23 int x,y; 24 bool flag; 25 }edge[30]; 26 27 void init() 28 { 29 memset(cnt,0,sizeof(cnt)); 30 for (int i=1;i<=6;i++){ 31 for (int j=i;j<=6;j++){ 32 cnt[i][j]++; 33 } 34 } 35 return ; 36 } 37 int node1[20],n,m,ans; 38 void dfs() 39 { 40 init(); 41 node edge1[30]; 42 for (int i=1;i<=m;i++){ 43 edge1[i].x=edge[i].x; 44 edge1[i].y=edge[i].y; 45 edge1[i].flag=false; 46 } 47 int tmp=0; 48 for (int i=1;i<=m;i++){ 49 if (cnt[node1[edge1[i].x]][node1[edge1[i].y]]>0){ 50 cnt[node1[edge1[i].x]][node1[edge1[i].y]]--; 51 tmp++; 52 } 53 } 54 ans=max(tmp,ans); 55 return ; 56 } 57 void find(int pos) 58 { 59 if (pos==n+1){ 60 dfs(); 61 return ; 62 } 63 for (int i=1;i<=6;i++){ 64 node1[pos]=i; 65 find(pos+1); 66 } 67 return ; 68 } 69 int main() 70 { 71 ans=0; 72 cin>>n>>m; 73 for (int i=1;i<=m;i++){ 74 cin>>edge[i].x>>edge[i].y; 75 if (edge[i].x>edge[i].y){ 76 int temp=edge[i].x; 77 edge[i].x=edge[i].y; 78 edge[i].y=temp; 79 } 80 } 81 find(0); 82 cout<<ans<<endl; 83 return 0; 84 }