题目链接:
题意:
有n只队伍,每个队伍有一个编号a[i]。
每场比赛有两支队伍参加,然后选一支队伍淘汰。共进行n-1场比赛,然后比赛结束。
若某场比赛是队伍i和j参加,则该场比赛的得分为a[i] xor a[j]。
问最大的总得分。
题解:
每两支队伍(i,j)连一条边,边权为a[i] xor a[j]。
然后求最大生成树即可。
AC Code:
1 #include2 #include 3 #include 4 #include 5 #include 6 #define MAX_N 2005 7 8 using namespace std; 9 10 struct Edge 11 { 12 int sour; 13 int dest; 14 long long len; 15 Edge(int _sour,int _dest,long long _len) 16 { 17 sour=_sour; 18 dest=_dest; 19 len=_len; 20 } 21 Edge(){} 22 friend bool operator < (const Edge &a,const Edge &b) 23 { 24 return a.len>b.len; 25 } 26 }; 27 28 int n; 29 int par[MAX_N]; 30 long long ans; 31 long long a[MAX_N]; 32 vector edge; 33 34 void read() 35 { 36 cin>>n; 37 for(int i=0;i >a[i]; 40 } 41 } 42 43 void build_graph() 44 { 45 for(int i=0;i