H题意:

给你一个n个节点n-1条无向边构成的树,每一个节点有一个权值wi,你需要把这棵树划分成k个子树,每一个子树的权值是这棵子树上所有节点权值之和。

你要输出这k棵子树的权值中那个最大的。你需要让输出的结果尽可能小

题解:

二分结果,重要的是判断这个二分的值是否满足题目要求

对于划分子树的选择,就选择子树中权值最大且又满足二分的答案的那个子树

代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 2e5 + 10;
const int INF = 0x3f3f3f3f;
const long long Max = 1e14 + 10;
int n, k, cnt, flag, head[maxn], num;
ll w[maxn], sum[maxn];
struct Edge
{
int v, nex;
} e[maxn << 2];
void add_edge(int x, int y)
{
e[cnt].v = y;
e[cnt].nex = head[x];
head[x] = cnt++;
}
void dfs(int x, int fa, ll limit)
{
sum[x] = w[x];
for (int i = head[x]; ~i; i = e[i].nex)
{
if (!flag)
return;
int v = e[i].v;
if (v != fa)
{
dfs(v, x, limit);
sum[x] += sum[v];
}
}
if (!flag)
return;
if (sum[x] > limit)
{
vector<ll> vec;
for (int i = head[x]; ~i; i = e[i].nex)
{
int v = e[i].v;
if (v != fa)
vec.push_back(sum[v]);
}
sort(vec.begin(), vec.end());
//int len=vec.size();
while (sum[x] > limit)
{
// sum[x]-=vec[len-1];
// num++;
// vec.pop_back();
// len--;
sum[x] -= vec.back();
vec.pop_back();
num++;
}
vec.clear();
}
if (num > k - 1) //因为我们没有把vec清空,所以最后还需要num数量还需要加1
{
flag = 0;
return;
}
}
bool check(ll x)
{
flag = 1;
num = 0;
dfs(1, 0, x);
if (flag)
return 1;
else
return 0;
}
int main()
{
int t, p = 0;
scanf("%d", &t);
while (t--)
{
cnt = 0;
memset(head, -1, sizeof(head));
memset(sum, 0, sizeof(sum));
scanf("%d%d", &n, &k);
for (int i = 1; i < n; ++i)
{
int x, y;
scanf("%d%d", &x, &y);
add_edge(x, y);
add_edge(y, x);
}
ll l = 1, r = Max, mid, ans;
for (int i = 1; i <= n; ++i)
{
scanf("%lld", &w[i]);
l = max(l, w[i]);
}
while (l <= r)
{
mid = (l + r) >> 1;
if (check(mid))
{
r = mid - 1;
ans = mid;
}
else
{
l = mid + 1;
}
}
printf("Case #%d: %lld\n", ++p, ans);
}
return 0;
}

K题意:

给你一个由n个节点m条边构成的一个无向图。保证不会出现重边和自环。你需要给边染色,你需要保证给一些边染色之后,图里面不会出现一个奇数环且这个环的所有边都被染色了。问你最多能给多少边染色。

题解:

就是二分图的一个性质。

你把这n个点分成两个集合(这一点暴力枚举就可以了,毕竟n<=16),然后如果一条边的两个端点在一个集合就不给它染色,否则就染色

代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 10 + 10;
const int INF = 0x3f3f3f3f;
struct shudui
{
int x, y;
} e[1000];
int main()
{
int t, p = 0;
scanf("%d", &t);
while (t--)
{
int n, m;
scanf("%d%d", &n, &m);
for (int i = 1; i <= m; ++i)
{
int x, y;
scanf("%d%d", &x, &y);
x -= 1;
y -= 1;
e[i].x = x;
e[i].y = y;
}
int sum = 0;
for (int i = 1; i < (1 << n); ++i)
//for (int i = 7; i <= 7; ++i)
{
int res = 0;
for (int j = 1; j <= m; ++j)
{
int x = e[j].x;
int y = e[j].y;
//printf("%d %d %d %d\n", x, y, ((1 << x) & i), ((1 << y) & i));
if ((((1 << x) & i) > 0 && ((1 << y) & i) == 0) || (((1 << x) & i) == 0 && ((1 << y) & i) > 0))
{
res++;
}
}
// if (res == 5)
// {
// printf("%d***\n", i);
// }
sum = max(sum, res);
}
printf("Case #%d: %d\n", ++p, sum);
}
return 0;
}

The 2019 ICPC Asia Shanghai Regional Contest H Tree Partition k、Color Graph的更多相关文章

  1. 2019-2020 ICPC, Asia Jakarta Regional Contest H. Twin Buildings

    As you might already know, space has always been a problem in ICPC Jakarta. To cope with this, ICPC ...

  2. 2019-2020 ICPC, Asia Jakarta Regional Contest (Online Mirror, ICPC Rules, Teams Preferred)

    2019-2020 ICPC, Asia Jakarta Regional Contest (Online Mirror, ICPC Rules, Teams Preferred) easy: ACE ...

  3. 2019 ICPC Asia Nanjing Regional

    2019 ICPC Asia Nanjing Regional A - Hard Problem 计蒜客 - 42395 若 n = 10,可以先取:6,7,8,9,10.然后随便从1,2,3,4,5 ...

  4. 2019 ICPC Asia Xuzhou Regional

    目录 Contest Info Solutions A. Cat B. Cats line up C. <3 numbers E. Multiply F. The Answer to the U ...

  5. 2019 ICPC Asia Yinchuan Regional

    目录 Contest Info Solutions A. Girls Band Party B. So Easy D. Easy Problem E. XOR Tree F. Function! G. ...

  6. 2019-2020 ICPC, Asia Jakarta Regional Contest

    目录 Contest Info Solutions A. Copying Homework C. Even Path E. Songwriter G. Performance Review H. Tw ...

  7. 2018 ICPC Asia Jakarta Regional Contest

    题目传送门 题号 A B C D E F G H I J K L 状态 Ο . . Ο . . Ø Ø Ø Ø . Ο Ο:当场 Ø:已补 .  :  待补 A. Edit Distance Thin ...

  8. UVALive 7141 BombX(离散化+线段树)(2014 Asia Shanghai Regional Contest)

    题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&category=6 ...

  9. Gym - 101981K The 2018 ICPC Asia Nanjing Regional Contest K.Kangaroo Puzzle 暴力或随机

    题面 题意:给你1个20*20的格子图,有的是障碍有的是怪,你可以每次指定上下左右的方向,然后所有怪都会向那个方向走, 如果2个怪撞上了,就融合在一起,让你给不超过5w步,让所有怪都融合 题解:我们可 ...

随机推荐

  1. 机器学习算法·KNN

    机器学习算法应用·KNN算法 一.问题描述 验证码目前在互联网上非常常见,从学校的教务系统到12306购票系统,充当着防火墙的功能.但是随着OCR技术的发展,验证码暴露出的安全问题越来越严峻.目前对验 ...

  2. oracle出现未选定行

    初学oracle,在SQLplus输入查询命令 出现了以下情况.. 后来了解到oracle的SQL语句其中有些词必须大写才会有效. 在这个语句中将username后面的值改为大写就可以了. 还有一种就 ...

  3. Docker haproxy应用构建 (五)

    编写dockerfile from centos-base:v1 MAINTAINER 57674891@qq.com RUN mkdir -p /data/{soft,src,logs,script ...

  4. rm: cannot remove `/tmp/localhost-mysql_cacti_stats.txt': Operation not permitted

    [root@DBslave tmp]# chown zabbix.zabbix /tmp/localhost-mysql_cacti_stats.txt

  5. 浏览器performance工具介绍及内存问题表现与监控内存的几种方式

    一.GC的目的 为了实现内存空间的良性循环,performance提供多种监控方式监控内存 分析内存相关信息 当代码出现问题的时候及时定位到出现问题的代码块, 提高执行效率. preforcemanc ...

  6. MybatisPlus多数据源及事务解决思路

    关于多数据源解决方案 目前在SpringBoot框架基础上多数据源的解决方案大多手动创建多个DataSource,后续方案有三: 继承org.springframework.jdbc.datasour ...

  7. 敏捷史话(四):敏捷是人的天性 —— Arie van Bennekum

    敏捷是人的天性,是你与生俱来的东西.面对敏捷,Arie van Bennekum 下了这样一个结论. 但这并不意味着人们只能通过天赋获得敏捷,对于想要学习敏捷的人来说,敏捷绝不是仅仅靠学习僵化的框架. ...

  8. SGA: allocation forcing component growth分析

    1.问题现象 20年12月31日,数据库应用人员反映2020-12-31 12:40:10存在告警,过了几分钟之后业务恢复正常. 表现的状态:Connect to database time out, ...

  9. BAPI创建PO,禁止净价信息更新

    大家都知道创建PO时,我们如果勾选了"信息更新",则该PO保存后相应的信息记录会把这个PO更新为其最后的凭证,那么这张PO的净价会作为下次创建新PO时净价的默认值. 这样我们设置的 ...

  10. Ice系列--基于IceGrid的部署方案

    前言 前一篇文章介绍了IceGrid的简单应用.这篇文章来介绍一下它的高端玩法-如何将模板,复制组,知名对象应用于部署方案及其作用. 基于模板的部署方案 之前介绍了xml格式的配置文件通过各种描述符如 ...