zhxfl hdu 3534 树形dp,求最长路径有多少条,存在负权边.doc_第1页
zhxfl hdu 3534 树形dp,求最长路径有多少条,存在负权边.doc_第2页
zhxfl hdu 3534 树形dp,求最长路径有多少条,存在负权边.doc_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

#include#include#include#includeusing namespace std;#define maxn 10001#define inf 0x7ffffffint dismaxn;struct Coor int x,v;vectorvmaxn;struct Node int Max1,Max2,Max,num1,num2,num; nodemaxn;/nodex中记录的是:/x的子节点通过x的最长路径为Max,条数为num,/Max1是x的子节点到x的最长距离,num1是条数/Max2是x的子节点到x的次长距离,num2是条数void dfs(int x,int f) int i; for(i=0; ivx.size(); i+) int u=vxi.x; if(u=f)continue; dfs(u,x); disx=nodex.Max1=nodex.Max2=nodex.Max=nodex.num=nodex.num1=nodex.num2=0; if(vx.size()=1&x!=1)nodex.num1=nodex.num2=1;/如果是叶子,num1记录为1 bool flag=1; /找出距离最长的叶子 for(i=0; inodex.Max1) flag=0; nodex.Max1=disu+w; nodex.num1=nodeu.num1; nodex.num=0; else if(disu+w=nodex.Max1) nodex.num+=nodex.num1*nodeu.num1;/最长的叶子超过1个,可以算出经过x的最长路径有多少个 nodex.num1+=nodeu.num1; if(nodex.num=0)/如果最长路径的个数还没有统计出来,统计第二长的 for(i=0; inodex.Max2) nodex.Max2=disu+w; nodex.num2=nodeu.num1; else if(disu+w=nodex.Max2) nodex.num2+=nodeu.num1; if(nodex.num2)/第二长的不是0 nodex.num=nodex.num1*nodex.num2; nodex.Max=nodex.Max1+nodex.Max2; else/第二长的为0 nodex.Max=nodex.Max1; nodex.num=nodex.num1; else nodex.Max=nodex.Max1*2; if(flag)nodex.num1=1; disx=nodex.Max1;int main() int i,j,n,x,y; Coor coor; /freopen(a.txt,r,stdin); while(scanf(%d,&n)!=EOF) for(i=1; i=n; i+) vi.clear(); disi=0; for(i=1; in; i+) scanf(%d%d%d,&x,&y,&coor.v); coor.x=x; vy.push_back(coor); coor.x=y; vx.push_back(coor); dfs(1,-1); int M=0; int N=0; for(i=1; iM) M=nodei.Max; N=nod

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论