BZOJ1907: 树的路径覆盖
来源:互联网 发布:奥尼尔生涯数据 编辑:程序博客网 时间:2024/06/05 14:06
BZOJ1907
其实挺
。。我的做法很鬼畜。
记
死于-1打成+1
TM这都过了样例!
【代码】
#include <cstdio>#include <iostream>#include <algorithm>#include <cstring>#include <cmath>#include <queue>#define N 10005#define Mod 1000000007#define INF 0x7fffffffusing namespace std;typedef long long ll;typedef unsigned long long ull;const ull base=31;ll read(){ ll x=0,f=1;char ch=getchar(); while(!isdigit(ch)){if(ch=='-') f=-1;ch=getchar();} while(isdigit(ch)){x=(x<<1)+(x<<3)+ch-'0';ch=getchar();} return x*f;}int T,n,cnt;int b[N<<1],p[N],nextedge[N<<1];int f[N][2];void Add(int x,int y){ cnt++; b[cnt]=y; nextedge[cnt]=p[x]; p[x]=cnt;}void Anode(int x,int y){ Add(x,y);Add(y,x);}void Dfs(int x,int fa){ int sum=0,mn=INF,Mn=INF; for(int i=p[x];i;i=nextedge[i]) { int v=b[i];if(v==fa) continue; Dfs(v,x);int now=min(f[v][0],f[v][1]); sum+=now;now=f[v][0]-now; if(now<Mn) mn=Mn,Mn=now; else if(now<mn) mn=now; } f[x][0]=f[x][1]=sum+1; if(Mn!=INF) f[x][0]=min(f[x][0],sum+Mn); if(Mn!=INF&&mn!=INF) f[x][1]=min(f[x][1],sum+Mn+mn-1); f[x][1]=min(f[x][1],f[x][0]);}int main(){ T=read(); while(T--) { n=read();cnt=0; for(int i=1;i<=n;i++) p[i]=0; for(int i=1;i<n;i++) Anode(read(),read()); Dfs(1,0);printf("%d\n",f[1][1]); } return 0;}
阅读全文
0 0
- 【BZOJ1907】树的路径覆盖
- BZOJ1907 树的路径覆盖
- BZOJ1907: 树的路径覆盖
- 【bzoj1907】树的路径覆盖
- 【bzoj1907】【树的路径覆盖】【贪心】
- 【BZOJ1907】树的路径覆盖【贪心】
- BZOJ1907: 树的路径覆盖 树形DP
- [BZOJ1907]树的路径覆盖(贪心)
- [BZOJ1907]树的路径覆盖(贪心||树形dp)
- 树的路径覆盖
- FZU2185 树的路径覆盖
- 树的最小路径覆盖
- 1907: 树的路径覆盖
- bzoj 1907: 树的路径覆盖
- FOJ 2185 树的路径覆盖 (图)
- 1907: 树的路径覆盖 贪心
- BZOJ 1907: 树的路径覆盖|贪心
- BZOJ 1907 树的路径覆盖
- sed: 1: “…”: invalid command code on Mac OS
- Xpath 模糊搜索
- 微信小程序 css控制文本行防止溢出
- Java泛型
- 基于flask的超分辨率展示
- BZOJ1907: 树的路径覆盖
- 调节系统音量VC++ (win10/win7)
- AssetBundle坑来坑去(二)
- kibana5.4.1安装
- 将博客搬至CSDN
- 每天进步一点点
- css常用技巧
- Windows Qt Creator 配置调试器
- JSP数据交互(cookie)