hdu 6178
来源:互联网 发布:淘宝运营月计划书 编辑:程序博客网 时间:2024/06/14 22:26
题解:这是树上的最大二分匹配,因为这颗树是连通的所以,可以直接从叶子节点开始向上贪心,每两个配一对即可
记得用读入优化即可。
之前写的HK算法现在过不了
- #include<iostream>
- #include<cstring>
- #include<algorithm>
- #include<cstdio>
- #include<vector>
- #include<queue>
- using namespace std;
- inline char nc(){
- static char buf[100000],*p1=buf,*p2=buf;
- return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;
- }
- inline int _read(){
- char ch=nc();int sum=0;
- while(!(ch>='0'&&ch<='9'))ch=nc();
- while(ch>='0'&&ch<='9')sum=sum*10+ch-48,ch=nc();
- return sum;
- }
- const int mx = 100005;
- const int inf = 0x3f3f3f3f;
- int n,k;
- int p[mx];
- int vis[mx];
- int solve(){
- int ans = 0;
- for(int i = n; i>=2; i--)
- if(!vis[p[i]]&&!vis[i]){
- ans++;
- vis[i] = 1;
- vis[p[i]] = 1;
- }
- if(2*ans>=k)
- return (k+1)/2;
- return k-ans;
- }
- int main(){
- int t;
- t = _read();
- while(t--){
- n = _read();
- k = _read();
- memset(vis,0,sizeof(vis));
- //memset(son,0,sizeof(son));
- for(int i = 2; i <= n; i++){
- int u;
- u = _read();
- p[i] = u;
- }
- printf("%d\n",solve());
- }
- return 0;
- }
阅读全文
0 0
- hdu 6178
- hdu 6178 Monkeys
- HDU 6178 深搜。。。
- HDU-6178 Monkeys
- hdu 6178 Monkeys 贪心
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- Hdu
- hdu
- Python用拉格朗日法进行数据横向插值
- oracle导入DMP文件数据
- 注释转换
- hdu 1789 Doing Homework again
- 通过battery-historian分析wakelock对CPU和电池续航能力的影响
- hdu 6178
- 写一篇文章试试,看看审核要多久?
- Codeforces Round #432 Div. 2 C. Five Dimensional Points(数学)
- Rad Studio 10.2.1,Delphi 10.2.1[DVDISO]
- 神经网络注意事项
- 快速搭建简单的springMvc框架的动态web工程
- 最长回文子串
- Java 8
- java多线程 例子