HDU 4647 Another Graph Game

题意:给定n个节点和m条连线,每个节点和每条连线都有一定的权值,如果有一个人取得了一条连线的两个节点,则他获得这条连线的权值,问按照最优策略,两个人的差是多少

解题思路:把桥的权值分到两个节点上去,对答案没有影响

解题代码:

 1 #include <string.h>
 2 #include <stdlib.h>
 3 #include <stdio.h>
 4 const int maxn = 111111;
 5 long long  a[maxn];
 6 int  cmp(const void *a , const void * b)
 7 {
 8    if( *(long long  *)a > *(long long *)b)
 9     return -1 ;
10    if(*(long long *)a == *(long long *)b )
11        return 0 ; 
12    if(*(long long *)a < *(long long *)b)
13        return 1; 
14 }
15 int main()
16 {
17   int n , m ;
18   //freopen("1005.in","r",stdin);
19 
20   while(scanf("%d %d",&n,&m) != EOF)
21   {
22      memset(a,0,sizeof(a));
23      for(int i = 1;i <= n;i ++){
24         scanf("%I64d",&a[i]);
25         a[i] = a[i]* 2;
26      }
27      int t1,t2;
28      long long t3;
29      for(int i = 1;i <= m;i ++)
30      {
31        scanf("%d %d %I64d",&t1,&t2,&t3);
32        a[t1] += t3;
33        a[t2] += t3;
34      }
35 
36      qsort(a+1,n,sizeof(long long ),cmp);
37      long long sum = 0 ;
38      int p = 0 ;
39      for(int i = 1;i <= n; )
40      {
41        sum += (a[i] - a[i+1]);
42        i = i + 2;
43 
44      }
45      printf("%I64d
",sum/2);
46   }
47   return 0 ;
48 }
View Code
没有梦想,何谈远方
原文地址:https://www.cnblogs.com/zyue/p/3242226.html