Hdu 5325 Crazy Bobo (拓扑排序)
2016-07-10 20:36
344 查看
解析:对于原树一条边(a,b),令w[a] < w[b] ,则由b向a连一条有向边. 那么,以节点u为最小权值点的最大Bobo Set,就是走有向边能够到达u的点们构成的集合.
[code]:
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
const int maxn = 5e5+5;
struct Nod{
int b,next;
void init(int b,int next){
this->b=b;this->next=next;
}
}buf[maxn*2];
int n,len,E[maxn],w[maxn],deg[maxn];
queue<int> que;
int dp[maxn];
void init(){
len = 0;
memset(E,-1,(n+1)*sizeof(int));
memset(deg,0,(n+1)*sizeof(int));
}
void add_edge(int a,int b){
if(w[a]<w[b]) swap(a,b);
buf[len].init(b,E[a]);E[a]=len++;
deg[b]++;
}
void topo(){
int i,j;
for(i = 1;i <= n;i++){
dp[i] = 1;
if(deg[i]==0){
que.push(i);
}
}
int u,v;
while(!que.empty()){
u = que.front();que.pop();
for(i = E[u];i != -1;i = buf[i].next){
v = buf[i].b;
dp[v] += dp[u];
if(--deg[v]==0) que.push(v);
}
}
printf("%d\n",*max_element(dp+1,dp+n+1));
}
int main(){
int i,j,u,v;
while(~scanf("%d",&n)){
init();
for(i = 1;i<= n;i++) scanf("%d",&w[i]);
for(i = 1;i < n;i++){
scanf("%d%d",&u,&v);
add_edge(u,v);
}
topo();
}
return 0;
}
[code]:
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
const int maxn = 5e5+5;
struct Nod{
int b,next;
void init(int b,int next){
this->b=b;this->next=next;
}
}buf[maxn*2];
int n,len,E[maxn],w[maxn],deg[maxn];
queue<int> que;
int dp[maxn];
void init(){
len = 0;
memset(E,-1,(n+1)*sizeof(int));
memset(deg,0,(n+1)*sizeof(int));
}
void add_edge(int a,int b){
if(w[a]<w[b]) swap(a,b);
buf[len].init(b,E[a]);E[a]=len++;
deg[b]++;
}
void topo(){
int i,j;
for(i = 1;i <= n;i++){
dp[i] = 1;
if(deg[i]==0){
que.push(i);
}
}
int u,v;
while(!que.empty()){
u = que.front();que.pop();
for(i = E[u];i != -1;i = buf[i].next){
v = buf[i].b;
dp[v] += dp[u];
if(--deg[v]==0) que.push(v);
}
}
printf("%d\n",*max_element(dp+1,dp+n+1));
}
int main(){
int i,j,u,v;
while(~scanf("%d",&n)){
init();
for(i = 1;i<= n;i++) scanf("%d",&w[i]);
for(i = 1;i < n;i++){
scanf("%d%d",&u,&v);
add_edge(u,v);
}
topo();
}
return 0;
}
相关文章推荐
- 项目30.1字符串处理函数
- uva 1619 - Feel Good || poj 2796 单调栈
- Unity3D The Blacksmith Demo部分内容学习
- 【回家之感】
- 2016-7-10日,博客创建~!
- R实战之从头到尾分析广告数据集
- 如果是普通测试开发,百度地图的签名用测试版就可以了,如果要打包上传到应用市场则要用到测试版,和发布版的签名,否则地图是不显示的。。。
- 可调用对象与function
- 【CJ】APAC_RoundA
- Linux系统查看系统是32位还是64位方法总结(转)
- MFT的0x10标准属性数据结构
- c++ string 处理字符串
- java学习问题1
- Codeforces 552.C Vanya and Scales
- 利用ssh-copy-id无需密码登录远程服务器
- MySQL的安装和启动
- Hdu 5324 Boring Class (cdq分治)
- c++ 构造函数的默认参数
- 笔记
- Mongoose3.3嵌入式web服务器源码剖析