hdu 4647 Another Graph Game,想到了就是水题了。。
来源:互联网 发布:单片机的组成 编辑:程序博客网 时间:2024/05/24 00:57
题目是给一个无向图,其中每个节点都有点权,边也有边权,然后就有2个小朋友开始做游戏了ALICE &BOB 游戏规定ALICE 先行动然后是BOB,然后依次轮流行动,行动时可以任意选取一个节点并获得节点的点权,如果他已经把一条边的2个端点都取了,那么他可以获得那边的边权,如果一条边的二个端点不同的人取了,那么谁也得不到那条变得边权了。 问游戏结束后怎样可以使ALICE得到的权值和减去BOB 的权值和最大,当然二个人都一样足够聪明,即每次行动都会采取最优的策略
解法:若没有边权,则对点权从大到小排序即可。。考虑边,将边权拆成两半加到它所关联的两个点的点权中即可。。。因为当两个人分别选择不同的点时,这一权值将互相抵消。
想想很好理解的,因为最后求的是差值。。。
需要注意的就是要用long long 别的就没什么了,为了避免拆边时出现分数,可以算结果的2倍最后输出的时候再除以2就行
下面是代码:
#include<cstdio>#include<algorithm>bool inline cmp(long long a,long long b){return a>b;}//递减排序的cmp函数long long node[100005],ans;int N,M;int read(){if(scanf("%d%d",&N,&M)!=2) return 0;for(int i=1;i<=N;i++){scanf("%I64d",&node[i]);node[i]*=2;//存2倍的点权}for(int a,b,c,i=0;i<M;i++){scanf("%d%d%d",&a,&b,&c);node[a]+=c,node[b]+=c;//拆边就不用除以2了}std::sort(node+1,node+N+1,cmp);//递减排序ans=0;for(int i=0;i<N/2;i++) ans+=node[2*i+1]-node[2*i+2];//算结果printf("%I64d\n",ans/2);//输出的结果要除以二return 1;}int main(){//freopen("in.txt","r",stdin);while(read());return 0;}
- hdu 4647 Another Graph Game,想到了就是水题了。。
- hdu 4647 - Another Graph Game(思路题)
- hdu 4647 Another Graph Game
- HDU 4647 Another Graph Game
- hdu 4647 Another Graph Game
- hdu 4647Another Graph Game
- hdu 4647——Another Graph Game
- HDU-4647 Another Graph Game 贪心
- hdu 4647 Another Graph Game (贪心)
- hdu 4647 Another Graph Game(高效)
- hdu 4647 Another Graph Game 多校第五场
- 2013 多校第五场 hdu 4647 Another Graph Game
- hdu - 4647 - Another Graph Game(分割权)
- hdu 4647 Another Graph Game 贪心 解题报告
- Another Graph Game
- HDU 5763 Another Meaning (数据水了)
- HDU4647:Another Graph Game(贪心)
- HDU4647 Another Graph Game 签到
- Linux做代理上网服务器
- 使用libnl显示接口信息
- 查找单链表中倒数第m个元素
- Android的SeekBar自定义样式
- 机器学习_mahout搭建
- hdu 4647 Another Graph Game,想到了就是水题了。。
- Linux命令行性能检测工具
- cocos2d-x 自适应
- Thinkphp学习笔记(三)输入方式和连接数据库的方式
- poj 2762 Going from u to v or from v to u?
- struts2 运行错误
- __super in MFC
- Longest Palindromic Substring
- DM6467开发领航-开发坏境安装