poj3659 dfs+贪心
2014-09-07 15:36
204 查看
因为根节建信号塔不是最优方案,应该在根节点的第一个父节点上建立信号塔。 每个点有3个状态:0 还没有新号 1 有新号但新号塔不在这个点上 2 信号塔就建在这个点上。
dfs到根的时候再向上一层一层更新点的状态。假如一个点的某一个子节点为0 那么这个点一定为2.#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstring>
using namespace std;
struct
{
int v,next;
}edg[21000];
int s[11000];
int vis[11000];
int head[11000];
int n,e;
int dfs(int u)
{
int place=0,tmp,r=0,kk=0;
vis[u]=1;
for(tmp=head[u];tmp!=-1;tmp=edg[tmp].next)
{
if(vis[edg[tmp].v]) continue;
r+=dfs(edg[tmp].v);
if(kk==2) continue;
if(s[edg[tmp].v]==0)
kk=2;
if(s[edg[tmp].v]==2)
kk=1;
}
s[u]=kk;
return r+(kk>>1);//
}
int main()
{
int i,u,v;
scanf("%d",&n);
memset(s,0,sizeof(s));
memset(vis,0,sizeof(vis));
memset(head,-1,sizeof(head));
e=0;
for(i=1;i<n;i++)
{
scanf("%d%d",&u,&v);
edg[e].v=v;edg[e].next=head[u];head[u]=e++;
edg[e].v=u;edg[e].next=head[v];head[v]=e++;
}
edg[e].v=1;
edg[e].next=head[0];
head[0]=e++;
printf("%d\n",dfs(0));
return 0;
}
/*
11
1 10
1 9
1 3
2 3
3 4
3 5
5 6
6 11
6 7
6 8
*/
dfs到根的时候再向上一层一层更新点的状态。假如一个点的某一个子节点为0 那么这个点一定为2.#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstring>
using namespace std;
struct
{
int v,next;
}edg[21000];
int s[11000];
int vis[11000];
int head[11000];
int n,e;
int dfs(int u)
{
int place=0,tmp,r=0,kk=0;
vis[u]=1;
for(tmp=head[u];tmp!=-1;tmp=edg[tmp].next)
{
if(vis[edg[tmp].v]) continue;
r+=dfs(edg[tmp].v);
if(kk==2) continue;
if(s[edg[tmp].v]==0)
kk=2;
if(s[edg[tmp].v]==2)
kk=1;
}
s[u]=kk;
return r+(kk>>1);//
}
int main()
{
int i,u,v;
scanf("%d",&n);
memset(s,0,sizeof(s));
memset(vis,0,sizeof(vis));
memset(head,-1,sizeof(head));
e=0;
for(i=1;i<n;i++)
{
scanf("%d%d",&u,&v);
edg[e].v=v;edg[e].next=head[u];head[u]=e++;
edg[e].v=u;edg[e].next=head[v];head[v]=e++;
}
edg[e].v=1;
edg[e].next=head[0];
head[0]=e++;
printf("%d\n",dfs(0));
return 0;
}
/*
11
1 10
1 9
1 3
2 3
3 4
3 5
5 6
6 11
6 7
6 8
*/
相关文章推荐
- 【贪心+DFS】D. Field expansion
- hdu 4274 Spy's Work DFS 贪心
- HDU5802-windows 10-dfs+贪心
- HDU 5527 Too Rich (贪心+DFS)
- CF_292_D_ Drazil and Tiles_贪心、dfs
- [noip2015]斗地主(dfs+贪心)
- Codeforces Round #468 (Div. 2,)(模拟 + 二进制位运算 + 贪心模拟 + dfs树)
- UVa 812 - Trade on Verweggistan (贪心+dfs)
- 【HDU5802】Windows 10 (贪心 + dfs)
- HDU 4582 DFS spanning tree 解题报告(贪心 & 树形DP)
- LightOJ 1219 Mafia(dfs—树上贪心)
- Hdu 5242 Game【Dfs+贪心】好题~
- Poj1463 及 Poj3659 树形贪心建立解
- bzoj 1907: 树的路径覆盖 (贪心+dfs+树形dp)
- 【POJ3659】【USACO 2008 Jan Gold】 3.Cell Phone Network 树上最小支配集/贪心 两种做法
- HDU - 5527(DFS+贪心)
- [贪心+dfs] ZOJ 3761 Easy billiards
- 【BZOJ4813】小Q的棋盘(CQOI2017)-贪心+DFS
- uva 10123 No Tipping(DFS+几何力矩+贪心)
- UVA 10123 No Tipping (物理+贪心+DFS剪枝)