//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 ;
}

最新文章

  1. C++标准库实现WAV文件读写
  2. C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 所有的基础数据都可以恢复删除
  3. hibernate学习(6)——加载策略(优化)
  4. Error #2044: 未处理的 IOErrorEvent:。 text=Error #2035: 找不到 URL这是flash加载外部资源时有时会遇到的问题,对于此问题解决如下
  5. (转)Android 系统属性SystemProperty分析
  6. C语言的基本输入与输出函数
  7. C语言中内存分配那些事儿
  8. Linq查询非泛型集合要指定Student类型(比如List)
  9. Qt之WebKit学习之绘图
  10. iOS-Debug
  11. CMD-NET命令详解(转载)
  12. Adroid APPIUM实例步骤
  13. zend studio里面这块注释是用什么快捷键按出来的?
  14. [转]git问题ERROR: Repository not found.的解决
  15. Suricata 之IPS模式
  16. 360开启wifi无网络访问处理办法
  17. Navicat再次激活
  18. JS window与document
  19. 前三章 man手册 查看文件
  20. iOS多线程编程之线程间的通信(转载)

热门文章

  1. js 对小数进行格式化(保留小数,去除小数后的0)
  2. ent facebook 开源的golang orm 框架
  3. 60: noi.ac #69
  4. Sublime Text 3安装Package Control并安装Processing插件
  5. selenuim自动化爬取汽车在线谷米爱车网车辆GPS数据爬虫
  6. 设计模式概要 &amp; 六原则一法则
  7. answer
  8. Spring Cloud Ribbon 源码分析---负载均衡算法
  9. uniapp - 文字收缩展示插件
  10. 使用SpringEL功能来动态化模板数据