poj 1192 最优连通子集

原创 2012年03月24日 22:39:42

题目链接:http://poj.org/problem?id=1192

题目大意:求一棵树的最大权连通子集,开始做树形dp的时候错误的认为整棵子树都要加进去,后来才发现错误。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<string>
#include<queue>
#include<algorithm>
#include<vector>
#include<stack>
#include<list>
#include<iostream>
#include<map>
using namespace std;
#define inf 0x3f3f3f3f
#define Max 1100
int max(int a,int b)
{
	return a>b?a:b;
}
int min(int a,int b)
{
	return a<b?a:b;
}
int x[Max],y[Max],val[Max],dp[Max];
int p[Max],sum[Max];
int eid=0,n,ans=0,cnt=0;
struct node
{
    int to,next;
}e[Max*5];
void addedge(int u,int v)
{
    e[eid].to=v;
    e[eid].next=p[u];
    p[u]=eid++;
}
void dfs(int u)
{
    int v,i;
    sum[u]=val[u];
    dp[u]=val[u];
    for(i=p[u];i!=-1;i=e[i].next)
    {
        v=e[i].to;
        if(sum[v]==inf)
        {
            dfs(v);
            if(dp[v]>0)
            sum[u]+=dp[v];
            dp[u]=max(dp[u],dp[v]+val[u]);
        }
    }
    dp[u]=max(dp[u],sum[u]);
    if(dp[u]>ans)
        ans=dp[u];
    //printf("u %d sum %d\n",u,sum[u]);
}
int main()
{
    int i,j;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%d%d%d",&x[i],&y[i],&val[i]);
        cnt+=val[i];
        sum[i]=inf;
    }

    memset(p,-1,sizeof(p));
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            if(i==j)
                continue;
            if((x[i]==x[j]&&(y[i]-y[j]==1||y[i]-y[j]==-1))||((y[i]==y[j])&&(x[i]-x[j]==1||x[i]-x[j]==-1)))
            {
                addedge(i,j);
            }
        }
    }
  //  printf("%d %d \n",eid,cnt);
    dfs(0);
    printf("%d\n",ans);
}


 

POJ-1192 最优连通子集(树形DP入门+模板)

题目链接:http://poj.org/problem?id=1192                                                                ...
  • acm_cxq
  • acm_cxq
  • 2016年04月19日 13:11
  • 184

poj 1192 最优连通子集 树状dp

最优连通子集 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 2431   Accepte...

POJ1192最优连通子集(树状dp)

最优连通子集 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 2140   Accepte...

poj1192 最优连通子集--树形dp

原题链接:http://poj.org/problem?id=1192 题意:其实就是一个求无向树的所有子树和的最大值 分析: 树形dp dp[i][0]表示以i为根,不包括i结点...
  • LaoJiu_
  • LaoJiu_
  • 2016年10月19日 14:33
  • 217

poj 1192 最优连通子集 树的孩子兄弟表示法+简单树型dp

题意: poj的良心中文题,不赘述了。 分析: 难点是想到能把题中的最优单连通子集问题转化为求树的最大权子树问题,之后我用的是孩子兄弟表示,当然在建树的时候直接dp也行。树的最大权子树感觉是最简...
  • sepNINE
  • sepNINE
  • 2015年09月14日 10:35
  • 640

POJ 1192 最优连通子集(树上DP)

题目链接:http://poj.org/problem?id=1192 题意:给出一个由平面整点构成的树(两点相邻当且仅到曼哈顿距离为1),有N个点,每个点有权值。求这棵树的权值最大的子树(...
  • szhouan
  • szhouan
  • 2016年12月08日 22:45
  • 175

最优连通子集的解法

关于POJ1192,求最优连通子集。 下面是POJ的题目描述: Description 众所周知,我们可以通过直角坐标系把平面上的任何一个点P用一个有序数对(x, y)来唯一表示,如果x, y都是...
  • miaote
  • miaote
  • 2016年10月31日 20:33
  • 321

poj 2524(并查集-求连通子集的个数)

Ubiquitous Religions Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 18...

树型dp poj1192

简单树型dp。 题目好罗嗦。。一棵树找最大权值和子树。算出最大权值 dfs 一下 搞掂!! 麦当劳最爱板烧哈哈哈 ~ #include #include #include #inclu...
  • pucca6
  • pucca6
  • 2013年08月05日 16:49
  • 396

poj 1192

http://blog.csdn.net/birdforever/article/details/5874502 题目中文。。。。但是描述得很复杂。。。不知道为啥要这样, 其实就是一个求无向树的所...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:poj 1192 最优连通子集
举报原因:
原因补充:

(最多只允许输入30个字)