Miku and Generals(可行性背包) 西安邀请赛

 题目链接:

https://nanti.jisuanke.com/t/39271

 题目大意:

当前有两个人,然后有n个点,每个点都有权值。然后给你m个对应关系,每一次的对应关系给你两个数,t1 和 t2 ,代表这两个不能在一个人手里。然后让你分配这n个点,使得这两个人的

差距进尽可能的小。然后输出大的那个。

具体思路:

对于每一个联通图,我们二分图染色,dp[i]表示当前这个差值能不能到达,这个过程可以通过可行性背包来解决。然后找一个最小的差值就可以了。

AC代码:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 # define ll long long
 4 # define inf 0x3f3f3f3f
 5 const int maxn = 2e5+100;
 6 int a[maxn];
 7 vector<int>Edge[maxn];
 8 int vis[maxn];
 9 int sum_0,sum_1;
10 void dfs(int u,int type){
11 if(!type)sum_0+=a[u];
12 else sum_1+=a[u];
13 vis[u]=1;
14 for(int i=0;i<Edge[u].size();i++){
15 int to=Edge[u][i];
16 if(vis[to])continue;
17 dfs(to,type^1);
18 }
19 }
20 int dp[maxn],pre[maxn];
21 int main(){
22 int T;
23 scanf("%d",&T);
24 while(T--){
25 int n,m,sum=0;
26 scanf("%d %d",&n,&m);
27 for(int i=0;i<=n;i++){vis[i]=0;Edge[i].clear();}
28 for(int i=1;i<=n;i++){
29 scanf("%d",&a[i]);
30 a[i]/=100;
31 sum+=a[i];
32 }
33 for(int i=0;i<=sum;i++){dp[i]=0;pre[i]=0;}
34 int st,ed;
35 for(int i=1;i<=m;i++){
36 scanf("%d %d",&st,&ed);
37 Edge[st].push_back(ed);
38 Edge[ed].push_back(st);
39 }
40 dp[0]=1;
41 for(int i=1;i<=n;i++){
42 if(vis[i])continue;
43 sum_0=0,sum_1=0;
44 dfs(i,0);
45 int tmp=abs(sum_0-sum_1);
46 for(int j=0;j<=sum;j++){
47 if(!dp[j])continue;
48 if(j+tmp<=sum)pre[j+tmp]=1;
49 if(abs(j-tmp)>=0)pre[abs(j-tmp)]=1;
50 }
51 for(int j=0;j<=sum;j++){
52 dp[j]=pre[j];
53 pre[j]=0;
54 }
55 }
56 for(int i=0;i<=sum;i++){
57 if(!dp[i])continue;
58 printf("%d\n",(i+sum+1)/2*100);
59 break;
60 }
61 }
62 return 0;
63 }

原文地址:https://www.cnblogs.com/letlifestop/p/10935745.html

时间: 2024-10-18 01:13:37

Miku and Generals(可行性背包) 西安邀请赛的相关文章

【随笔】天道酬勤——西安邀请赛之感

至今我都不敢相信周日那天发生了什么.当我那个只是抱着试一试的心态去提交的D题结果竟然返回AC的时候,当志愿者把第四个气球送过来的时候,当我们的排名一度达到12名的时候,我不敢相信自己的双眼.直到最后,我看到了那张平平淡淡的获奖证书,看到了上面写着的NWPU_Assassin.我才真正的冷静下来,原来上帝还是眷顾我的. 一 其实这次比赛我们又当志愿者又当参赛队员,累得半死.志愿者们系统不会搞,我们来:座位安排不会,我们来:前前后后大事小事都是我们在搞.热身赛的时候我们一个队做完两个题之后就直接去当

hdu 4849 最短路 西安邀请赛 Wow! Such City!

http://acm.hdu.edu.cn/showproblem.php?pid=4849 会有很多奇怪的Wa的题,当初在西安就不知道为什么wa,昨晚做了,因为一些Sb错误也wa了很久,这会儿怎么写都会AC.... 收获: 1.还是基本都构思好在去敲代码,因为当时没过,昨晚心里有阴影,敲得很慢,而且最开始各种取模以防止漏掉,太保守了......以后一定先估算是不是需要取模防止TLE,当然时间够的话还是适当多取个模防止莫名其妙的错误.. 2.如果出错,注意参数是不是对的,最开始写好之后,因为m和

2014 北京、西安邀请赛

今年有幸能打两场邀请赛,真的是很幸运...但是打出来的效果就...本来都没脸写总结了的,后来想了想还是写了吧,不然这两场又白打了. 由于两场比赛相隔只有一周,所以我们就给自己放了10+天的假,玩是玩爽了,可惜比的就很烂了...稍微记录一下流水账吧,以后反思用. 先说一下北京的吧. 第一天热身赛,能做的只有两道,C题是输出随机数,A是24点,于是决定先猜几发C,猜了几个数都不对,然后就让队友去敲A了,敲完A之后队友发现C题ONE字很大!于是猜了个1,然后竟然就过了...B题是7次之内猜出一个每位都

西安邀请赛J题 状态压缩DP

Cacti是一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具.Cacti是通过 snmpget来获取数据,使用 RRDtool绘画图形,而且你完全可以不需要了解RRDtool复杂的参数.它提供了非常强大的数据和用户管理功能,可以指定每一个用户能查看树状结构.host以及任何一张图,还可以与LDAP结合进行用户验证,同时也能自己增加模板,功能非常强大完善.界面友好.软件 Cacti 的发展是基于让 RRDTool 使用者更方便使用该软件,除了基本的 Snmp 流量

西安邀请赛A题 字符串基本处理

很抱歉,学校的OJ并不支持外网,而且还没有加上题目... 题意很简单,就是给一个文章,关于那个作死狗DOGE,问文章中出现了多少个DOGE,不考虑大小写. 然后就很粗暴的用toupper判断了,毫无难度. 代码如下: /**** *@author Shen *@title 西安邀请赛A */ #include <cctype> #include <cstdio> using namespace std; const int maxLen = (1 << 16); cha

西安邀请赛C题 单源点最短路

作者 : Dolphin 原文地址:http://blog.csdn.net/qingdujun/article/details/27109035 一.实体完整性定义 [例1]将Student表中的Sno属性定义为码. CREATE TABLE Student ( Sno CHAR(10) PRIMARY KEY, /*在列定义主码*/ Sname CHAR(20) NOT NULL, Sage SMALLINT ); 或者: CREATE TABLE Student ( Sno CHAR(10

西安邀请赛D题 字符串生成题 深搜

很抱歉,学校的OJ并不支持外网,而且还没有加上题目... 题意是说,求一个字符串,他的所有长度超过4的子串都是唯一的. 然后我当时是想aaaa, baaa, caaa, daaa...这样巴拉巴拉一直生成下去的,后来发现真的是想的太天真了,因为前面的两个长度为4的子串("aaaabaaa")的存在,直接封杀了3个子串("aaab", "aaba", "abaa").然后我就想记录状态去试着暴力去跑一个生成机.其实也很简单,就是

【题解整理】西安邀请赛部分题题解

很抱歉,学校的OJ并不支持外网,而且还没有加上题目... A 字符串基本处理 http://blog.csdn.net/polossk/article/details/27113175 B 状态压缩加剪枝,但是我们没敢做 C 单源点最短路 http://blog.csdn.net/polossk/article/details/27113385 D 字符串生成器 深搜 http://blog.csdn.net/polossk/article/details/27120395 J 状态压缩DP h

POJ1742可行性背包

题目: Description People in Silverland use coins.They have coins of value A1,A2,A3...An Silverland dollar.One day Tony opened his money-box and found there were some coins.He decided to buy a very nice watch in a nearby shop. He wanted to pay the exact