这题面又有毒、、

题目不清楚、而且它好像还用三行文字解释了一个三元环、、

然后图不就是这样(强迫症勿看)?:

然后由于交点只有一个、所以直接子树dp、

注意对环处理一定是从子树根节点判断环处理、不然会更新不上,1WA

码:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define N 200005
int hou[N<<1],xia[N],zhong[N<<1],tot,ans,x,y,d[N],a[N],v[N],n,m,fu[N],cnt,g[N][3],f[N][3];
bool vis[N];
void jian(int a,int b)
{
++tot,hou[tot]=xia[a],xia[a]=tot,zhong[tot]=b;
}
void jia(int a,int b)
{jian(a,b);jian(b,a);
}
void dp(int o,int oo)
{int i,j;cnt=0;for(i=oo;i!=o;i=fu[i])a[++cnt]=i,g[i][1]=f[i][1],g[i][0]=f[i][0];a[++cnt]=o;g[o][1]=f[o][1],g[o][0]=f[o][0];//o是不选的for(i=2;i<=cnt-1;i++){int x=a[i],y=a[i-1];g[x][0]+=max(g[y][0],g[y][1]);g[x][1]+=g[y][0];      }f[o][0]+=max(g[a[cnt-1]][0],g[a[cnt-1]][1]);for(i=1;i<=cnt;i++)g[a[i]][0]=f[a[i]][0],g[a[i]][1]=f[a[i]][1];for(i=2;i<=cnt-1;i++){int x=a[i],y=a[i-1];if(i==2){g[x][0]+=g[y][0];g[x][1]+=g[y][0];continue;}g[x][0]+=max(g[y][0],g[y][1]);g[x][1]+=g[y][0];        }   f[o][1]+=g[a[cnt-1]][0];
}
void dfs(int o,int fa,int dis)
{int i,j;d[o]=dis;f[o][1]=v[o];fu[o]=fa;vis[o]=1;for(i=xia[o];i!=-1;i=hou[i]){int nd=zhong[i];if(nd==fa||vis[nd])continue;dfs(nd,o,dis+1);       }for(i=xia[o];i!=-1;i=hou[i]){int nd=zhong[i];if(fu[nd]!=o&&d[nd]>d[o])dp(o,nd);}
}
int main()
{int x,y,i;memset(xia,-1,sizeof(xia));scanf("%d%d",&n,&m);
for(i=1;i<=m;i++)
{
scanf("%d%d",&x,&y);jia(x,y);
}   for(i=1;i<=n;i++)scanf("%d",&v[i]);dfs(1,0,1);ans=max(f[1][0],f[1][1]);
printf("%d",ans);
}

2017.9.8 无归岛 思考记录相关推荐

  1. 2017.3.24 分裂游戏 思考记录

    事先说明:这不是好题解,这只是思考记录 同机房的xp都学博弈了..    感觉还是学学看吧 先来看一下简单的nim: 题目: Alice和Bob放置了N堆不同的石子,编号1..N,第i堆中有A[i]个 ...

  2. 2017.10.24 上升序列 思考记录

    终于有会做的题了... 一开始想用正常的lis ,然后从前往后扫, 由于最优查询区间在序列上是按顺序单调递增的,所以想记录每个点取哪个值跳到哪,这样是n*m logn的 然后发现既然是单调递增的那直接 ...

  3. 2017.10.7 括号序列 思考记录

    这个题看起来很简单,但细节比较麻烦.参考完别人的代码后才想出自己的解法的.. 一开始认为已匹配的括号是可以直接消的,所以就只维护了两个变量 但还有区间取反.. 由于和已配对的括号的顺序有关,所以不是很 ...

  4. 2017.9.28 约数研究 思考记录

    这个题一开始可能会想复杂, 然而它需要对答案的贡献进行归类 可以发现,一个约数对其倍数的数贡献是一样的,,所以可以考虑离散 所以直接对于每个数不好求,就可以考虑每个约数的贡献 而每个约数i就有n/i个 ...

  5. 2017.5.11 道路修建 思考记录

    这个线段树一眼秒了(主要是有前面的思考经验) 就是维护两个列对应线段上的形态.,比较好想的 但数据结构题有个特点--使你知道结构也不会做----会做也会很大概率爆零.... 所以数据结构题必须 小数据 ...

  6. 2017.5.9 积木大赛 思考记录

    为什么要把这个题放上来?因为这个题还是很有代表性的 首先必须要跳出模拟的思考: 可以忽视每一步具体的操作,直接看目标,这样就会总结出一些规律: 连续上升或连续下降的序列次数一定是最大值,因为每次都可以 ...

  7. 2017.4.25 解方程 思考记录

    这个题好乱啊..n*m就会炸,每个数还都可能是10^10000..这n*ai tm读进去都要10^6效率  . 一般这种似乎没有任何数论定理的东西范围还这么变态只能考虑随机化算法了.. 似乎可以用取模 ...

  8. 2017.3.29 报表统计 思考记录

    有生之年第一道浙江省选题(虽然历史久远并且很水) 记录每个位置数列的左端点和右端点 维护两颗splay   一颗维护全局最小差值,一颗维护相邻最小差值 对于全局splay:每次插入时记录路径取差值mi ...

  9. 2017.3.6 地精部落 思考记录

    其实这个题第一眼是没有任何思路的 强行无视题解,经过漫长的找规律,终于推出了一个可行的方法: f[i][0/1]i表示最高位的数字,0表示开始是上升,1表示开始是下降. 为什么会推出这个? 1.因为所 ...

最新文章

  1. registry ---------仓库 -----------------镜像
  2. Java基础--二维数组
  3. asp之GetArray提取链接地址,以$Array$分隔的代码
  4. 三星s9没有推送android10,2月14日 三星Galaxy S9/S9+开始推送Android 9.0正式版
  5. Java经典面试题整理及答案详解(四)
  6. C#调用C++Dll封装时遇到的一系列问题 参考
  7. WindowsXP 系统登陆原理及其验证机制概述
  8. 1.三层交换,ACL,PPP,OSPF,热备
  9. 第二届(2021—2022学年)少年硅谷——全国青少年人工智能教育成果展示大赛
  10. protocal buffer repeate 关键字
  11. R导入excel数据
  12. Android应用签名证书(.keystore)生成
  13. android+微博点赞动画,模仿微博点赞动画
  14. 美创解读|《数据安全法》实施,企业数据安全合规技术能力建设
  15. 一文系统搞懂协同推荐算法(二)
  16. 理财中的六大心理学效应(一)
  17. 让复杂Json数据和对象自由转换 --- Gson
  18. Mac 解压rar格式文件(附解压工具包)
  19. EEPROM 24C02 24C64误换Debug
  20. 2020最新版Net加壳工具

热门文章

  1. 加载resnet18的代码
  2. LeetCode-316. 去除重复字母(hard且重要)
  3. Python面向对象编程 self的含义
  4. unity 镜面反射_Unity | Diffuse Light漫反射光照
  5. php中sha1,PHP中sha1()函数和md5()函数的绕过
  6. java 创建线程_java多线程|创建线程的各种方式
  7. Https java信任_java访问非经过信任证书https的方法
  8. 如何找mysql8.0的rpm安装包_centos7 mysql8.0 RPM软件包方式安装
  9. python3x_Python3x 基本知识点
  10. 里面怎么定义变量_小哥今天要给朋友们分享一下Java编程语言中的变量与常量的区别...