The 2019 ICPC Asia Shanghai Regional Contest H Tree Partition k、Color Graph
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的更多相关文章
- 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 ...
- 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 ...
- 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 ...
- 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 ...
- 2019 ICPC Asia Yinchuan Regional
目录 Contest Info Solutions A. Girls Band Party B. So Easy D. Easy Problem E. XOR Tree F. Function! G. ...
- 2019-2020 ICPC, Asia Jakarta Regional Contest
目录 Contest Info Solutions A. Copying Homework C. Even Path E. Songwriter G. Performance Review H. Tw ...
- 2018 ICPC Asia Jakarta Regional Contest
题目传送门 题号 A B C D E F G H I J K L 状态 Ο . . Ο . . Ø Ø Ø Ø . Ο Ο:当场 Ø:已补 . : 待补 A. Edit Distance Thin ...
- UVALive 7141 BombX(离散化+线段树)(2014 Asia Shanghai Regional Contest)
题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&category=6 ...
- Gym - 101981K The 2018 ICPC Asia Nanjing Regional Contest K.Kangaroo Puzzle 暴力或随机
题面 题意:给你1个20*20的格子图,有的是障碍有的是怪,你可以每次指定上下左右的方向,然后所有怪都会向那个方向走, 如果2个怪撞上了,就融合在一起,让你给不超过5w步,让所有怪都融合 题解:我们可 ...
随机推荐
- 爬虫-urllib模块的使用
urllib是Python中请求url连接的官方标准库,在Python3中将Python2中的urllib和urllib2整合成了urllib.urllib中一共有四个模块,分别如下: request ...
- tf.argmax(vector,axis)函数的使用
1.返回值 vector为向量,返回行或列的最大值的索引号: vector为矩阵,返回值是向量,返回每行或每列的最大值的索引号. 2.参数 vector为向量或者矩阵 axis = 0 或1 0:返回 ...
- 【MySQL】centos6中/etc/init.d/下没有mysqld启动文件,怎么办
如果/etc/init.d/下面没有mysqld的话,service mysqld start也是不好使的,同样,chkconfig mysqld on也是不能用 解决办法: 将mysql的mysql ...
- 基础练习(上) - 蓝桥杯(Python实现)
闰年判断: 题目: 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 给定一个年份,判断这一年是不是闰年. 当以下情况之一满足时,这一年是闰年: 1. 年份是4的倍数而不是100的倍数 ...
- Java中的NIO进阶
目录 前言 NIO与多线程 Readable和Writeable的空触发 请求与返回的处理 事件的处理机制 NIO多线程使用的一个例子 前言 之前一篇文章简单介绍了NIO,并附了一个简单的例子,但是自 ...
- [从源码学设计]蚂蚁金服SOFARegistry之配置信息
[从源码学设计]蚂蚁金服SOFARegistry之配置信息 目录 [从源码学设计]蚂蚁金服SOFARegistry之配置信息 0x00 摘要 0x01 业务范畴 1.1 配置作用 1.2 学习方向 0 ...
- ECharts图表——封装通用配置
前言 前段时间在做大屏项目,大量用到echarts图表,大屏对设计规范要求比较高,而大屏项目,经常会因为业务方面的原因.或者是数据方面的原因改动UI设计,所有图表的代码也是三天一小改.五天一大改 因此 ...
- Java运算符概要与数学函数
运算符概要 在Java中,使用算术运算符+,-,*,/表示加减乘除运算,当参与/的运算的两个操作数都是整数时,表示整数除法,否则,表示浮点除法.整数的求余操作(有时称为取模),用%表示,例如,15/2 ...
- unity3D进阶
前言 在之前的例子中,我们都没有用到unity的精髓,例如地形系统.物理系统.粒子系统等,本文记录unity3D的进阶简单应用 前期准备 https://unity.cn/releases/full/ ...
- 炸裂!MySQL 82 张图带你飞
之前两篇文章带你了解了 MySQL 的基础语法和 MySQL 的进阶内容,那么这篇文章我们来了解一下 MySQL 中的高级内容. 其他文章: 138 张图带你 MySQL 入门 47 张图带你 MyS ...