2019 西安邀请赛 D
//n件物品,m种关系,(有关系的2个不能在同一组)
//把所有物品分为2组,希望最后2组的差值尽可能小,输出较大者
/*
二分图涂色+可行性(01)背包
dp[i] =1表示 最后差值为i可行
建图后,对于每个连通分量记录差值,来求所有的可行
*/
#include<bits/stdc++.h>
using namespace std;
int t,n,m;
#define N 250
#define M 102000
int a[N],head[N],sum;
int cnt,vis[N];
int dp[M],dp1[M];
int sum1=,sum2=;
void init(){
cnt = ;
for(int i =;i<N;i++) {
head[i] = -;
vis[i] =;//多组输入
}
}
struct Node{
int u,v,nex;
}e[N*];
void add(int u,int v)
{
e[cnt].u=u;e[cnt].v=v;
e[cnt].nex=head[u];head[u]=cnt++;
}
void dfs(int x,int rt){
vis[x] = ;
if(rt==)
sum1+=a[x];
else{
sum2+=a[x];
}
for(int i =head[x];i!=-;i=e[i].nex){
int v = e[i].v;
if(!vis[v])
dfs(v,rt^);//0^1=1,1^1=0
}
}
int main()
{
scanf("%d",&t);
while(t--)
{
init();
scanf("%d%d",&n,&m);
int x,y;
sum =;
for(int i =;i<=n;i++)
{
scanf("%d",&a[i]);
sum+=a[i]/;
a[i]/=;//题目说明都是100的倍数
}
for(int i =;i<m;i++) {
scanf("%d%d",&x,&y);
add(x,y);add(y,x);//无向图
} int num;
for(int i =;i<=sum;i++) dp[i] = ;
dp[] = ;//dp[0]一定先设为1,来引入第一个差值
for(int i =;i<=n;i++) {
if(!vis[i]){
sum1=,sum2=;
dfs(i,);
num = abs(sum1-sum2);
//printf("%d %d %d\n",sum1,sum2,num);
for(int j=sum;j>=;j--){
if(dp[j]){
//如 :0,j. 0 ,num 或者 j,0.0,num
if(abs(j+num)<=sum) dp1[abs(j+num)] =;
dp1[abs(j-num)] =;
}
}
for(int j =sum;j>=;j--){
dp[j] = dp1[j],dp1[j] = ;
}
}
}
//一定需要2个dp 数组,利用dp1一直更新到所有的物品都取完
for(int i =;i<=sum;i++) {
if(dp[i]){ printf("%d\n",(sum+i)/*);
break;
}
}
}
return ;
}
2019 西安邀请赛 D的更多相关文章
- 2019 西安邀请赛 M
Problem Description There are n planets ∼n. Each planet is connected to other planets through some t ...
- ACM-ICPC 2019 西安邀请赛 D.Miku and Generals(二分图+可行性背包)
“Miku is matchless in the world!” As everyone knows, Nakano Miku is interested in Japanese generals, ...
- 计蒜客 39272.Tree-树链剖分(点权)+带修改区间异或和 (The 2019 ACM-ICPC China Shannxi Provincial Programming Contest E.) 2019ICPC西安邀请赛现场赛重现赛
Tree Ming and Hong are playing a simple game called nim game. They have nn piles of stones numbered ...
- 2019南昌邀请赛网络预选赛 M. Subsequence
传送门 题意: 给出一个只包含小写字母的串 s 和n 个串t,判断t[i]是否为串 s 的子序列: 如果是,输出"YES",反之,输出"NO": 坑点: 二分一 ...
- 计蒜客 39280.Travel-二分+最短路dijkstra-二分过程中保存结果,因为二分完最后的不一定是结果 (The 2019 ACM-ICPC China Shannxi Provincial Programming Contest M.) 2019ICPC西安邀请赛现场赛重现赛
Travel There are nn planets in the MOT galaxy, and each planet has a unique number from 1 \sim n1∼n. ...
- 计蒜客 39279.Swap-打表找规律 (The 2019 ACM-ICPC China Shannxi Provincial Programming Contest L.) 2019ICPC西安邀请赛现场赛重现赛
Swap There is a sequence of numbers of length nn, and each number in the sequence is different. Ther ...
- 计蒜客 39270.Angel's Journey-简单的计算几何 ((The 2019 ACM-ICPC China Shannxi Provincial Programming Contest C.) 2019ICPC西安邀请赛现场赛重现赛
Angel's Journey “Miyane!” This day Hana asks Miyako for help again. Hana plays the part of angel on ...
- 计蒜客 39268.Tasks-签到 (The 2019 ACM-ICPC China Shannxi Provincial Programming Contest A.) 2019ICPC西安邀请赛现场赛重现赛
Tasks It's too late now, but you still have too much work to do. There are nn tasks on your list. Th ...
- The 2019 ACM-ICPC China Shannxi Provincial Programming Contest (西安邀请赛重现) J. And And And
链接:https://nanti.jisuanke.com/t/39277 思路: 一开始看着很像树分治,就用树分治写了下,发现因为异或操作的特殊性,我们是可以优化树分治中的容斥操作的,不合理的情况只 ...
随机推荐
- 第8章 动态SQL
8.1动态SQL中的元素 8.2<if>元素 举例,在映射文件中: <select id="findCustomerByNameAndJobs" paramete ...
- 学习:SLT_string容器
前言:这个学了感觉没多大用,自己只需要了解就好,忘记了可以参考以下网站的示例 参考网站:https://github.com/AnkerLeng/Cpp-0-1-Resource/blob/maste ...
- 内存模型学习-- Container Executor task之间的关系
(分割线前的都是废话) java8内存模型: http://www.cnblogs.com/paddix/p/5309550.html http://www.cnblogs.com/dingyings ...
- 代码块和Java的API及Object类
代码块 局部代码块 特点: 以”{}”划定的代码区域,此时只需要关注作用域的不同即可 方法和类都是以代码块的方式划定边界的 构造代码块 优先于构造方法执行,构造代码块用于执行所有对象均需要的初始化动作 ...
- GitBook github
创建一个新的仓库 创建一个新文件,名为SUMMARY.md 创建一本书首先进入gitbook的官网:https://www.gitbook.com/ 创建账户https://github.com/ 在 ...
- [后渗透]获取到 Meterpreter 之后的操作
sysinfo 列出受控主机的系统信息 ls 列出目标主机的文件和文件夹信息 use priv 加载特权提升扩展模块,来扩展meterpreter库 ps 显示所有运行进程以及关联的用户账户 gets ...
- Fluent Meshing生成interface
源视频链接: https://pan.baidu.com/s/1St4o-jB5KRfN5dLsvRe_vQ 提取码: 9rrr
- error: 'for' loop initial declaration used outside C99 mode的解决方法
for(int i = 0;i<10;i++)这样写循环时可能会出现如题编译错误,解决方法有两种,如下:1 将文件后缀名由".c"改为".cpp"2 in ...
- 拼多多面试真题:如何用 Redis 统计独立用户访问量!
阅读本文大概需要 2.8 分钟. 作者:沙茶敏碎碎念 众所周至,拼多多的待遇也是高的可怕,在挖人方面也是不遗余力,对于一些工作 3 年的开发,稍微优秀一点的,都给到 30K 的 Offer. 当然,拼 ...
- 【Beta】Scrum meeting 9
目录 写在前面 进度情况 任务进度表 Beta-1阶段燃尽图 遇到的困难 照片 commit记录截图 文档集合仓库 后端代码仓库 技术博客 写在前面 例会时间:5.13 22:30-22:45 例会地 ...