//SPOJ - UOFTCG 树的最小路径覆盖

 #include <bits/stdc++.h>
#include <vector>
using namespace std;
#define ll long long
const int mod = 1e9+;
const int maxn=;
const int N = 1e5+;
int cnt;
int head[N];
struct edge{
int to,next;
}e[N<<];
void addedge(int u,int v){
e[cnt].to=v,e[cnt].next=head[u],head[u]=cnt++;
e[cnt].to=u,e[cnt].next=head[v],head[v]=cnt++;
} int cov[N];
bool vis[N],used[N];
void dfs(int u,int f){
used[u]=;
cov[u]=;
int tot=;
for(int i=head[u];~i;i=e[i].next){
int v=e[i].to;
if(v==f) continue;
dfs(v,u);
cov[u]+=cov[v];
if(!vis[v]) tot++;
}
if(tot>=) cov[u]-=,vis[u]=;
else if(tot==) cov[u]-=;
}
int main(){
// freopen("in.txt","r",stdin);
int T;
scanf("%d",&T);
while(T--){
cnt=;
memset(used,false,sizeof(used));
memset(head,-,sizeof(head));
memset(cov,,sizeof(cov));
memset(vis,false,sizeof(vis));
int n,m;
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++){
int u,v;
scanf("%d%d",&u,&v);
addedge(u,v);
}
int ans=;
for(int i=;i<=n;i++){
if(!used[i]) dfs(i,),ans+=cov[i];
}
// cout<<cov[1]<<endl;
printf("%d\n",ans+n-);
}
}

最新文章

  1. FFmpeg + SoundTouch实现音频的变调变速
  2. SAP 应用服务负载均衡的实现
  3. tomcat下的https项目创建与部署
  4. 内部使用final参数的原因
  5. 关于报错The specified child already has a parent的解决办法
  6. USB通讯协议 &amp;&amp; 数据传输
  7. 移动应用/APP的测试流程及方法
  8. Unity 2D 效应器与来回移动的实现
  9. [转] fastText
  10. 第8章 IO库 自我综合练习
  11. 下载文件的协议:HTTP、FTP、P2P
  12. C++学习(十八)(C语言部分)之 指针2
  13. 【jquery】jquery 实现许愿墙效果,可拖拽
  14. OC 单例实现
  15. python读取shp
  16. 运行用例时,报错Unknow Error:Element xxx is not clickable……的解决方法
  17. 如何使用idea把web项目打成war包
  18. Atom IDE开发工具, ASCII艺术评论, ninimap 插件
  19. review01
  20.  P2152 [SDOI2009]SuperGCD (luogu)

热门文章

  1. JS 实现省市联动
  2. mysql 监控及优化——转载自http://www.cnblogs.com/suansuan/
  3. HashMap 什么时候进行扩容呢
  4. day22 yield的表达式的应用,面向过程编程,内置函数前几个
  5. 剑指Offer-14:输入一个链表,输出该链表中倒数第k个结点。
  6. vue mounted组件的使用
  7. Docker系列(七):Docker图形化管理和监控
  8. Vue项目组织规范
  9. 无法启动此程序,因此计算机中丢失VCRUNTIME140.dll。
  10. iOS逆向系列-Cycript