题目链接:http://cstest.scu.edu.cn/soj/problem.action?id=4313

判断是不是存在拆图得到新连通分支的点个数是K的倍数
注意一个点所连的边只能被切一条

#include<stdio.h>
#include<string.h> #define N 200001 struct node{
int f,t,fn,tn,nex;
}edge[N];
int edgenum, head[N];
void addedge(int u, int v){
node E={u,v,0,0,head[u]};
edge[edgenum] = E;
head[u] = edgenum++;
}
int n,K,m; //n个点 m条边
int du[N],dp[N];
bool vis[N], use[N];
int ans ;
void dfs(int x){
for(int i=head[x]; i!=-1; i = edge[i].nex){
int v = edge[i].t;
if(!vis[v]){
vis[v] = 1;
dfs(v);
dp[x] += dp[v];
edge[i].tn = dp[v];
edge[i].fn = n - edge[i].tn;
if(edge[i].tn %K==0 && !use[v] )ans++, use[v] = 1; if(edge[i].fn %K==0 && !use[x] )ans++, use[x] = 1;
}
}
}
int main(){
int T,i,j;scanf("%d",&T);
while(T--){
scanf("%d %d",&n,&K); memset(head,-1,sizeof(head)), edgenum = 0;
memset(du,0,sizeof(du));
m=n-1;
while(m--){
int u,v;scanf("%d %d",&u,&v);
addedge(u,v);
addedge(v,u);
du[u]++,du[v]++;
}
memset(vis,0,sizeof(vis));
memset(use,0,sizeof(use));
for(int i=1;i<=n;i++)dp[i] = 1;
ans = 0;
for(int i=1;i<=n;i++)
if(du[i] == 1)
{ vis[i]=1, dfs(i); break;} if(ans>= n/K)printf("YES\n");
else printf("NO\n"); }
return 0;
}
/*
2
4 2
1 2
2 3
3 4
4 2
1 2
1 3
1 4 */

SCU 4313 把一棵树切成每段K个点 (n%k)剩下的点不管的更多相关文章

  1. java读取txt文件的2中方法---并将内容(每一行以固定的字符分割切成2段)存到map中去

    #java读取txt文件的第一种方法 /** * 方法:readTxt * 功能:读取txt文件并把txt文件的内容---每一行作为一个字符串加入到List中去 * 参数:txt文件的地址 * 返回: ...

  2. hdu4714 Tree2cycle 把树剪成链

    题目是问把一棵树通过剪边.加边形成一个环的最小代价. 分成两步,先把树剪成一些链,再把链连接成一个环. 设一棵有n个节点的树,剪掉X条边后,形成L条链. 那么代价为X+L. n-1-X=edgeNum ...

  3. MS - 1 - 把二元查找树转变成排序的双向链表

    ## 1. 把二元查找树转变成排序的双向链表 ## ### 题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表. ### 要求不能创建任何新的结点,只调整指针的指向. 10       ...

  4. Codeforces - 828E DNA Evolution —— 很多棵树状数组

    题目链接:http://codeforces.com/contest/828/problem/E E. DNA Evolution time limit per test 2 seconds memo ...

  5. 【Data structure & Algorithm】把二元查找树转变成排序的双向链表

    把二元查找树转变成排序的双向链表 题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表,要求不能创建任何新节点,只调整指针指向. 比如将二元查找树 10 /       \ 6       ...

  6. ZT:如果有来生,要做一棵树

    出处:https://zhidao.baidu.com/question/393644025.html 原以为是三毛所作,想不到还有争议. 如果有来生,要做一棵树, 站成永恒.没有悲欢的姿势, 一半在 ...

  7. 介绍一个可以将Expression表达式树解析成Transact-SQL的项目Expression2Sql

    一.Expression2Sql介绍 Expression2Sql是一个可以将Expression表达式树解析成Transact-SQL的项目.简单易用,几分钟即可上手使用,因为博主在设计Expres ...

  8. LeetCode——Same Tree(判断两棵树是否相同)

    问题: Given two binary trees, write a function to check if they are equal or not. Two binary trees are ...

  9. 二元查找树转变成排序的双向链表之C#算法实现

    此题为July在CSDN发布的微软编程面试100题中的第一题,觉得蛮有趣的,今天也拿过来玩玩,July的代码用的是C++实现,可能因为有指针的原因吧,感觉看起来相对比较容易理解整个的实现过程,而我,试 ...

随机推荐

  1. 【BZOJ 3160】 3160: 万径人踪灭 (FFT)

    3160: 万径人踪灭 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1440  Solved: 799 Description Input Outp ...

  2. UOJ #30. [CF Round #278] Tourists

    UOJ #30. [CF Round #278] Tourists 题目大意 : 有一张 \(n\) 个点, \(m\) 条边的无向图,每一个点有一个点权 \(a_i\) ,你需要支持两种操作,第一种 ...

  3. Problem G: 深入浅出学算法008-求佩尔方程的解

    Description 求关于x y的二次不定方程的解 x2-ny2=1 Input 多组输入数据,先输入组数T 然后输入正整数n(n<=100) Output 对于每组数据输出一行,求y< ...

  4. [bzoj1015](JSOI2008)星球大战 starwar(离线+并查集)

    Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武 器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通 ...

  5. 判断一个js对象是不是数组

    //今天突然想到一个问题,如何判断一个对象是不是数组 var arr = [0, 1, 2]; console.log(arr) //object, 显然不行 //查阅了很多资料,发现几个挺不错的方法 ...

  6. 使用Mysql慢查询日志对有效率问题的SQL进行监控

    输入命令:show variables like 'slow%' 可以发现 slow_query_log 为 OFF(默认),表示未开启慢查询日志 slow_query_log_file 为慢查询日志 ...

  7. WEB安全扫描器Netsparker推荐给大家

    Netsparker是一款综合型的web应用安全漏洞扫描工具,它分为专业版和免费版,免费版的功能也比较强大. Netsparker与其他综合 性的web应用安全扫描工具相比的一个特点是它能够更好的检测 ...

  8. HDU 4675 GCD of Sequence (2013多校7 1010题 数学题)

    GCD of Sequence Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)T ...

  9. Programmer in Google Code

    https://code.google.com/p/vsprog/ CLI program support USB_TO_XXX of Versaloon. Support AVR_ISP/JTAG, ...

  10. spingBoot-自定义过滤器

    package com.cx.springboot.filters; import java.io.IOException; import javax.servlet.Filter; import j ...