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的更多相关文章

  1. 5.23考试总结(NOIP模拟2)

    5.23考试总结(NOIP模拟2) 洛谷题单 看第一题第一眼,不好打呀;看第一题样例又一眼,诶,我直接一手小阶乘走人 然后就急忙去干T2T3了 后来考完一看,只有\(T1\)骗到了\(15pts\)[ ...

  2. 考试T1总结(又CE?!)

    考试T1CE... 最近不适合考试 T1 扶苏是个喜欢一边听古风歌一边写数学题的人,所以这道题其实是五三原题.歌曲中的主人公看着墙边的海棠花,想起当年他其实和自己沿着墙边种了一排海棠,但是如今都已枯萎 ...

  3. 题解【2.23考试T3】val

    3. val[题目描述] 这是一道传统题,源代码的文件名为 val.cpp/c/pas. 有一个值初始为 0,接下来 n 次你可以令其在之前基础上+2 或+1 或-1.你需要保证,这个值在整个过程中达 ...

  4. 题解【2.23考试T2】str

    2. str [题目描述] 这是一道传统题,源代码的文件名为 str.cpp/c/pas. 构造 n 个 01 字符串 S1...Sn,使得对于任意 i≠j,Si 不是 Sj 的前缀.在最小化串长和的 ...

  5. 【题解】Codeforces Round #798 (Div. 2)

    本篇为 Codeforces Round #798 (Div. 2) 也就是 CF1689 的题解,因本人水平比较菜,所以只有前四题 A.Lex String 题目描述 原题面 给定两个字符串 \(a ...

  6. 2019.2.25考试T1, 矩阵快速幂加速递推+单位根反演(容斥)

    \(\color{#0066ff}{题解}\) 然后a,b,c通过矩阵加速即可 为什么1出现偶数次3没出现的贡献是上面画绿线的部分呢? 考虑暴力统计这部分贡献,答案为\(\begin{aligned} ...

  7. 2019.2.14 考试T1 FFT

    \(\color{#0066ff}{ 题目描述 }\) 衡水二中的机房里经常有人莫名其妙地犇雷,leizi很生气,决定要找出那个犇雷的人 机房有n个人,每个人都认为机房里有两个人可能会犇雷,其中第i个 ...

  8. 某考试T1 game

    题目背景 无 题目描述 Alice 和 Bob 在一个圆环上玩游戏.圆环上有 n 个位置,按照顺时针顺序 依次标号为 1 到 n.Alice 和 Bob 分别有一个数字集合,集合中都是在 [1, n− ...

  9. 某考试 T1 arg

    题目描述 给出一个长度为 m 的序列 A, 请你求出有多少种 1...n 的排列, 满足 A 是它的一个 LIS. 输入格式 第一行两个整数 n, m. 接下来一行 m 个整数, 表示 A. 输出格式 ...

随机推荐

  1. hdu6212 Zuma(区间dp)

    #pragma GCC optimize(2) #include <bits/stdc++.h> #define ll long long #define ls(i) i<<1 ...

  2. Java_Day7(上)

    Java learning_Day7(上) 本人学习视频用的是马士兵的,也在这里献上 <链接:https://pan.baidu.com/s/1qKNGJNh0GgvlJnitTJGqgA> ...

  3. MySQL的数据库备份

    MySQL的数据库备份 备份的原因: 1.保证重要数据不丢失 2.数据转移 MySQL数据库备份方式: 1.方法1:在Sqlyog这种可视化工具中手动导出 2.方法2:直接拷贝物理文件(就是data文 ...

  4. linux vi编辑器光标跳到文件末尾

    1.:0,:1,gg都可以到第一行2.shift+g到末行3.或者:$=检查总行数比如24,:24到第24行

  5. HDU6683

    题意 英文 做法 考虑公比为\(\frac{a}{b}\),满足\(a>b,(a,b)=1\) 枚举长度\(k\),设序列头为\(p\),尾为\(q\),有\(p\times \frac{a^{ ...

  6. ECMAScript规范中第六大基本类型 Symbol

    初步了解第六大基本类型Symbol 概述: 什么是Symbol.Symbol是一个标记,一个独一无二的记号. Symbol的出现主要是解决了以前ES5中两个问题 在属性中同名的属性会被覆盖 无法做到属 ...

  7. MySQL进阶之索引

    一.索引的本质: 数据库查询是数据库的最主要的功能之一,数据库系统的设计者从查询算法的角度对数据库进行了一定的优化. 最基本的顺序查找算法的复杂度为O(n),在数据量很大的时候算法的效率是很低的.虽然 ...

  8. linux基础安全

    一.用户防护 Chage  -l  用户名   查看用户账号有效期信息 Chage  -E   时间   用户名   给用户设置过期时间 /etc/login.defs  文件保存许多默认设置 Pas ...

  9. windows上快速新建1g的文件

    在E盘新建1g文件 fsutil file createnew d:\b.txt 1073741824

  10. TODO:rds数据库实例

    rds数据库实例怎么创建的 rds数据库实例高可用是怎么实现的 rds备份是怎么实现的 参考: https://www.cnblogs.com/jackyzzy/p/7384355.html http ...