hdu 4647 Another Graph Game

思路:

对于一条边来说, 如果拿了一个点, 说明已经拿了该边的一半权值。
如果某边的两个的顶点分别是不同的人。  那么差值还是不变的。 
如果某边的两个顶点分别是同一个人。 那么和值也不变。
所以我们可以把一个边分解到两个顶点上,然后依次Alice 取最大,Bob 取次大。 因为 他们都是绝顶聪明的。

 

代码如下:

 

 1 #include<iostream>
 2 #include<stdio.h>
 3 #include<algorithm>
 4 using namespace std;
 5 double d[100001],ans;
 6 int main(){
 7     int n,m,i,u,v,w;
 8     while(scanf("%d%d",&n,&m)!=EOF){
 9         for(i=1;i<=n;i++) scanf("%lf",&d[i]);
10         for(i=0;i<m;i++){
11             scanf("%d%d%d",&u,&v,&w);
12             d[u]+=w/2.0;
13             d[v]+=w/2.0;
14         }
15         sort(d+1,d+n+1);
16         ans=0.0;
17         for(i=n;i>=1;i-=2) ans+=d[i]-d[i-1];
18         printf("%.0lf\n",ans);
19     }
20     return 0;
21 }
View Code

 

 

 

posted @ 2013-08-09 21:51  _随心所欲_  阅读(214)  评论(0编辑  收藏  举报