解题思路:若没有边权,则对点权从大到小排序即可。。
考虑边,将边权拆成两半加到它所关联的两个点的点权中即可。
。。因为当两个人分别选择不同的点时,这一权值将互相抵消。
以上摘自杭电的解题报告。
至于为什么,还想得不是很清楚····
由于在处理时使用的是整数,整数/2,当为奇数时0.5就不见了,所以直接把点的权值翻倍,最后结果除以2,这算是一个技巧吧····
贴代码:
1 #include2 #include 3 #define N 100005 4 using namespace std; 5 long long int a[N]; 6 bool cmp(long long int a,long long int b) 7 { 8 return a > b; 9 }10 int main()11 {12 int n,m;13 while(scanf("%d%d",&n,&m) != EOF)14 {15 for(int i=1; i<=n; ++i)16 {17 scanf("%I64d",&a[i]);18 a[i] *= 2;19 }20 for(int i=0; i