题解【2.23考试T1】div
1. div
【题目描述】
这是一道传统题,源代码的文件名为 div.cpp/c/pas。
给定一棵树,你要判断是否存在一条边,使得割掉这条边后,这棵树被分成了点数相等的两部分,并且如果存在,请你找到这条边。
【输入格式】
从 div.in 中读入。
第一行,一个正整数 n。
接下来 n-1 行描述树的形态,每行两个空格隔开的正整数 u 和 v,表示树中有一条连接 u 号点和 v 号点的边。保证数据合法。
【输出格式】
输出到 div.out 中。
仅一行,一个正整数 ans 表示要割掉给出的第 ans 条边。如果不存在这样的边,输出-1。
【输入样例 A】
4
1 2
2 3
3 4
【输出样例 A】
2
【输入样例 B】
8
1 2
2 3
2 4
1 5
5 6
5 7
5 8
【输出样例 B】
4
【评分标准】
对于 40%的数据,n<=100;
对于另 40%的数据,树退化为链;
对于 100%的数据,n<=100,000。
时间限制 1s,空间限制 512MB。
题解:
我们可以先判断n是否为奇数。如果是,就直接输出-1(因为任意奇数都不能平分成两个整数相加)。
然后,我们可以用dfs 求出每个子树的大小,找到一个大小恰为总点数一半的子树即可。
代码(std):
#include <bits/stdc++.h>
#define rep(i,l,r) for(int i=l;i<=r;i++)
#define per(i,r,l) for(int i=r;i>=l;i--)
#define N 100005
int n,x,y,ans,sz[N];
std::vector<std::pair<int,int> > e[N];
void dfs(int pre,int x)
{
sz[x]=;
rep(i,,e[x].size())
{
int y=e[x][i-].first;
if(y==pre) continue;
dfs(x,y);
sz[x]+=sz[y];
if(sz[y]*==n) ans=e[x][i-].second;
}
}
int main()
{
char fni[]="div.in",fno[]="div.out";
freopen(fni,"r",stdin);
freopen(fno,"w",stdout);
scanf("%d",&n);
rep(i,,n) e[i].clear();
rep(i,,n-)
{
scanf("%d%d",&x,&y);
e[x].push_back(std::make_pair(y,i));
e[y].push_back(std::make_pair(x,i));
}
ans=-;
dfs(,);
printf("%d\n",ans);
fclose(stdin);
fclose(stdout);
}
题解【2.23考试T1】div的更多相关文章
- 5.23考试总结(NOIP模拟2)
5.23考试总结(NOIP模拟2) 洛谷题单 看第一题第一眼,不好打呀;看第一题样例又一眼,诶,我直接一手小阶乘走人 然后就急忙去干T2T3了 后来考完一看,只有\(T1\)骗到了\(15pts\)[ ...
- 考试T1总结(又CE?!)
考试T1CE... 最近不适合考试 T1 扶苏是个喜欢一边听古风歌一边写数学题的人,所以这道题其实是五三原题.歌曲中的主人公看着墙边的海棠花,想起当年他其实和自己沿着墙边种了一排海棠,但是如今都已枯萎 ...
- 题解【2.23考试T3】val
3. val[题目描述] 这是一道传统题,源代码的文件名为 val.cpp/c/pas. 有一个值初始为 0,接下来 n 次你可以令其在之前基础上+2 或+1 或-1.你需要保证,这个值在整个过程中达 ...
- 题解【2.23考试T2】str
2. str [题目描述] 这是一道传统题,源代码的文件名为 str.cpp/c/pas. 构造 n 个 01 字符串 S1...Sn,使得对于任意 i≠j,Si 不是 Sj 的前缀.在最小化串长和的 ...
- 【题解】Codeforces Round #798 (Div. 2)
本篇为 Codeforces Round #798 (Div. 2) 也就是 CF1689 的题解,因本人水平比较菜,所以只有前四题 A.Lex String 题目描述 原题面 给定两个字符串 \(a ...
- 2019.2.25考试T1, 矩阵快速幂加速递推+单位根反演(容斥)
\(\color{#0066ff}{题解}\) 然后a,b,c通过矩阵加速即可 为什么1出现偶数次3没出现的贡献是上面画绿线的部分呢? 考虑暴力统计这部分贡献,答案为\(\begin{aligned} ...
- 2019.2.14 考试T1 FFT
\(\color{#0066ff}{ 题目描述 }\) 衡水二中的机房里经常有人莫名其妙地犇雷,leizi很生气,决定要找出那个犇雷的人 机房有n个人,每个人都认为机房里有两个人可能会犇雷,其中第i个 ...
- 某考试T1 game
题目背景 无 题目描述 Alice 和 Bob 在一个圆环上玩游戏.圆环上有 n 个位置,按照顺时针顺序 依次标号为 1 到 n.Alice 和 Bob 分别有一个数字集合,集合中都是在 [1, n− ...
- 某考试 T1 arg
题目描述 给出一个长度为 m 的序列 A, 请你求出有多少种 1...n 的排列, 满足 A 是它的一个 LIS. 输入格式 第一行两个整数 n, m. 接下来一行 m 个整数, 表示 A. 输出格式 ...
随机推荐
- github下载总是失败解决
解决访问github等网站慢或下载失败的问题 第二种方法可以使用
- ssrf漏洞利用(内网探测、打redis)
摘要:存在ssrf漏洞的站点主要利用四个协议,分别是http.file.gopher.dict协议. file协议拿来进行本地文件的读取,http协议拿来进行内网的ip扫描.端口探测,如果探测到637 ...
- Hdu1042 N! (阶乘高精度模板)
Problem Description Given an integer N(0 ≤ N ≤ 10000), your task is to calculate N! Input One N in ...
- C++ lambda函数及其用法(转)
由于接触C++不久,很多东西比较陌生,今天看阿里云OSS的C++ SDK文件下载部分例子,发现有如下lambda表达式用法,故了解一下相关知识 /*获取文件到本地文件*/ GetObjectReque ...
- i春秋公益赛 ezpload
题目思路:一看解出的人比较多,emmm,传个马,命令执行一下.最后读到flag文件. /readflag,可执行. 题对萌新比较友好...... 考点:Linux命令,文件上传,命令执行. http: ...
- Python之三:运算符与表达式
1.运算符: 1.1.运算符种类: 运算符 名称 说明 例子 + 加 5+4 - 减 * 乘 / 除 // 取整除 商的整数部分 3//2,结果 ...
- Dubbo之服务消费
Dubbo的服务消费主要包括两个部分.第一大步是ReferenceConfig类的init方法调用Protocol的refer方法生成Invoker实例,这是服务消息的关键.第二大步是把Invoker ...
- Educational Codeforces Round 65 (Rated for Div. 2)B. Lost Numbers(交互)
This is an interactive problem. Remember to flush your output while communicating with the testing p ...
- MySQL的修改和删除数据表字段
MySQL的修改和删除数据表字段 写在前面: 数据库存在的意义:数据存储和数据管理. 数据库:行(数据),列(字段) 注意:本页是解决了列的字段问题.下一页是解决行的数据问题. 注意,所有的字段名,最 ...
- java打印出某一指定路径下的文件夹内的所有子文件夹和文件,并区分开来
public class printoutFile { public static void main(String[] args) { printFile(new File("D:\\te ...