当前位置: 首页 > 编程日记 > 正文

【BZOJ 4016】[FJOI2014]最短路径树问题

! 卡时过了 为什么我的这么慢?姿势不对??? -->谢 ws_fqk 我的Do(num[i])应该用 DO(root) 找了半天的root居然没有用....
define的教训永远忘不了了!!!
优化了好几处才过的...者...

#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#define MAXN 30010
using namespace std;
int n,m,k;
bool b[MAXN];
int team[10000000],head,tail,d[MAXN];
int tot,g[MAXN],nnext[MAXN*2],num[MAXN*2],cost[MAXN*2];
int tot0,g0[MAXN],nnext0[MAXN*4],num0[MAXN*4],cost0[MAXN*4];
int tot1,g1[MAXN],nnext1[MAXN*4],num1[MAXN*4],cost1[MAXN*4];
struct H{int x,y,z;}G[MAXN*4];
bool cmp(H a,H b){if(a.x==b.x)return a.y>b.y;return a.x<b.x;}
void SPFA()
{memset(d,61,sizeof(d));d[1]=0;team[++tail]=1;while(head!=tail){int x=team[++head];b[x]=false;for(int i=g0[x];i;i=nnext0[i]){int tmp=num0[i];if(d[x]+cost0[i]<d[tmp]){d[tmp]=d[x]+cost0[i];if(!b[tmp]){b[tmp]=true;team[++tail]=tmp;}}}}
}
void Dfs_Road(int x)
{b[x]=true;for(int i=g1[x];i;i=nnext1[i]){int tmp=num1[i],z=cost1[i];if(!b[tmp]){tot++,nnext[tot]=g[x],g[x]=tot,num[tot]=tmp,cost[tot]=z;tot++,nnext[tot]=g[tmp],g[tmp]=tot,num[tot]=x;cost[tot]=z;Dfs_Road(tmp);}}
}
//************点分治***************
int root,sum,max_son[MAXN],size[MAXN],ans0,ans1,N[30000+1][2],T[30000+1][2];void Get_Root(int x,int fa)
{size[x]=1;max_son[x]=0;for(int i=g[x];i;i=nnext[i])if(num[i]!=fa&&!b[num[i]]){Get_Root(num[i],x);max_son[x]=max(max_son[x],size[num[i]]);size[x]+=size[num[i]];}max_son[x]=max(max_son[x],sum-size[x]);if(max_son[x]<max_son[root]) root=x;
}
void Dfs_T(int x,int fa,int depth,int c)
{if(depth>k) return;if(c>T[depth][0]) T[depth][0]=c,T[depth][1]=1;else if(c==T[depth][0]) T[depth][1]++;for(int i=g[x];i;i=nnext[i])if(!b[num[i]]&&num[i]!=fa)Dfs_T(num[i],x,depth+1,c+cost[i]);
}
void Do(int x)
{for(int i=0;i<=k;i++) N[i][0]=N[i][1]=0;N[0][1]=1;b[x]=true;for(int i=g[x];i;i=nnext[i])if(!b[num[i]]){for(int i=0;i<=k;i++) T[i][0]=T[i][1]=0;Dfs_T(num[i],-1,1,cost[i]);for(int i=1;i<=k;i++){if(ans0<N[k-i][0]+T[i][0])ans0=N[k-i][0]+T[i][0],ans1=N[k-i][1]*T[i][1];else if(ans0==N[k-i][0]+T[i][0])ans1+=N[k-i][1]*T[i][1];}for(int i=1;i<=k;i++){if(N[i][0]<T[i][0])N[i][0]=T[i][0],N[i][1]=T[i][1];else if(N[i][0]==T[i][0])N[i][1]+=T[i][1];}}for(int i=g[x];i;i=nnext[i])if(!b[num[i]]){root=0;sum=size[num[i]];Get_Root(num[i],-1);Do(root);}
}int main()
{cin>>n>>m>>k; k--;for(int i=1;i<=m;i++){int x,y,z;scanf("%d %d %d",&x,&y,&z);G[i]=(H){x,y,z};G[i+m]=(H){y,x,z};tot0++;nnext0[tot0]=g0[x],g0[x]=tot0,num0[tot0]=y;cost0[tot0]=z;tot0++;nnext0[tot0]=g0[y],g0[y]=tot0,num0[tot0]=x,cost0[tot0]=z;}SPFA(); sort(G+1,G+m*2+1,cmp);for(int i=1;i<=m*2;i++){int x=G[i].x,y=G[i].y,z=G[i].z;if(d[x]+z==d[y])tot1++,nnext1[tot1]=g1[x],g1[x]=tot1,num1[tot1]=y,cost1[tot1]=z;}memset(b,false,sizeof(b));Dfs_Road(1);memset(b,false,sizeof(b));root=0,sum=n,max_son[0]=n+1;Get_Root(1,-1);Do(root);cout<<ans0<<' '<<ans1;return 0;
}

转载于:https://www.cnblogs.com/ofsxb/p/5141635.html

相关文章:

mongodb索引--从55.7秒到毫秒级别

从头开始&#xff0c;验证mongodb的索引的好处。(window7环境下) 下载mongodb服务器&#xff0c;并解压到d盘&#xff0c;并使用以下命令启动 mongod --dbpath D:\mongodb\datamongo客户端Robo 3T 去官网下载&#xff0c;安装准备数据&#xff0c;条数为1亿public static void …

汉字转16进制java_java实现汉字转unicode与汉字转16进制实例

本文实例讲述了java实现汉字转unicode与汉字转16进制的实现方法。分享给大家供大家参考。具体实现方法如下&#xff1a;一、汉字转unicodepublic static String toUnicode(String s){String as[] new String[s.length()];String s1 "";for (int i 0; i < s.len…

使用pytest对django项目单元测试

2019独角兽企业重金招聘Python工程师标准>>> 背景 使用django开发了个人博客&#xff0c;欲单元测试&#xff0c;后遍寻网络&#xff0c;然相关资料甚少&#xff0c;遂成此文&#xff0c;望对汝有所助 环境 pytestpytest-djangopytest-covpytest-htmldjangomixer测试…

jquery通知插件toastr

使用方法3个简单步骤对于其他API调用,看到演示。<link href"toastr.css" rel"stylesheet"/> <script src"toastr.js"></script> //显示一个信息没有标题 toastr.info(Are you the 6 fingered man?)其他选项/显示一个警告,没有…

1282. Game Tree

http://acm.timus.ru/problem.aspx?space1&num1282 简单博弈 注意题意的理解 代码&#xff1a; #include<iostream> #include<cstdio> #include<cstring> #include<string> #include<vector> #include<queue> #include<map> #i…

java web dao_JavaWeb项目,DAO应该怎么写?

有一张字段足够多的表&#xff0c;要对它进行各种各样的查询&#xff1a;根据字段A根据字段B&#xff0c;或者根据字段A和B&#xff0c;或者再加上字段C&#xff0c;然后可能还要加上分页&#xff0c;排序等等的逻辑。现在的项目的DAO层为了满足上面这些需要出现了很多参数列表…

2016 - 1- 21 - RunLoop使用(2016-1-24修改一次)(2016 - 1 - 24 再次修改)

一&#xff1a;常驻线程 &#xff1a;当需要一个线程一直处理一些耗时操作时&#xff0c;可以让它拥有一个RunLoop。具体代码如下&#xff1a; 1.通过给RunloopMode里加源来保证RunLoop不直接退出。 这里有个很重要得知识点&#xff0c;runloop对象如果mode为空得话&#xff…

【BZOJ1016】【Luogu P4208】 [JSOI2008]最小生成树计数 最小生成树,矩阵树定理

蛮不错的一道题&#xff0c;遗憾就遗憾在数据范围会导致暴力轻松跑过。 最小生成树的两个性质&#xff1a; 不同的最小生成树&#xff0c;相同权值使用的边数一定相同。不同的最小生成树&#xff0c;将其都去掉同一个权值的所有边&#xff0c;其连通性一致。这样我们随便跑一个…

Asterisk安装

一、获取asterisk安装包wget http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-1.6.0.tar.gz后面的版本号可以改变&#xff0c;可以安装的版本可以参考http://downloads.asterisk.org/pub/telephony/asterisk/releases/二、解压安装1. [root~]# tar -z…

java编写一个通讯录_java写的通讯录(小玩意)

上次有发个超级菜鸟级别的连接access的小程序受兄弟委托&#xff0c;如今表妹期末了&#xff0c;要写个通讯录于是草草的给写了个&#xff0c;毕竟有一个学期了&#xff0c;所以这次的代码会比较合理些……使用说明:实现技术:java语言,界面采用java swing编程,数据库用access数…

20175203 2018-2019 实验五《网络编程与安全》

20175203 2018-2019 实验五《网络编程与安全》 知识重点&#xff08;摘自实验资料&#xff09; 栈 &#xff1a;(Stack)是一种只允许在表尾插入和删除的线性表&#xff0c;有先进后出&#xff08;FILO&#xff09;&#xff0c;后进先出(LIFO)的特点。允许插入和删除的一端称为栈…

统计文件种类数+获取子shell返回值的其它方法

前言 只是作为一个shell的小小练习和日常统计用&#xff0c;瞎折腾的过程中也是摸到了获取子shell返回值的几种方法&#xff1b; 肯定还有别的方法&#xff0c;跟进程间的通信相关&#xff0c;希望你能提出建议和补充&#xff0c;谢谢~ 完整程序&#xff1a; #! /bin/bash #检查…

java中next的用法_关于java iterator的next()方法的用法

UYOUnext()是java迭代器类(Iterator)的方法&#xff0c;获得当前游标指向的下一个元素&#xff0c;详细说明和应用如下&#xff1a;1、迭代器(Iterator)介绍  迭代器是一种设计模式&#xff0c;它是一个对象&#xff0c;它可以遍历并选择序列中的对象&#xff0c;而开发人员不…

Python如何进行cross validation training

以4-fold validation training为例 (1) 给定数据集data和标签集label 样本个数为 sampNum len(data)(2) 将给定的所有examples分为10组 每个fold个数为 foldNum sampNum/10 (3) 将给定的所有examples分为10组 参考scikit-learn的3.1节&#xff1a;Cross-validation 1 impor…

Python的while循环

2019独角兽企业重金招聘Python工程师标准>>> 1.while循环的格式 while 条件:条件满足时&#xff0c;做的事情1条件满足时&#xff0c;做的事情2条件满足时&#xff0c;做的事情3...(省略)...demo i 0while i < 5:print("当前是第%d次执行循环" % (i …

LeetCode Add Binary

Given two binary strings, return their sum (also a binary string). For example,a "11"b "1"Return "100". 这题用数组来做可能更简单&#xff0c;但考虑到可能面试的时候要求不能开额外的数组&#xff0c;就只能对string操作了。最主要的…

linux java内存分析_Java内存分析利器MAT使用详解

这是一篇阅读MAT helper的笔记。Heap dump是Java进程在特定时间的一个内存快照。通常在触发heap dump之前会进行一次full gc&#xff0c;这样dump出来的内容就包含的是被gc后的对象。dump文件包含的内容&#xff1a;1&#xff0c;全部的对象&#xff1a;类&#xff0c;域&#…

[js] MD5算法

js版md5算法&#xff1a; /** * * MD5 (Message-Digest Algorithm) * http://www.webtoolkit.info/ * **/var MD5 function (string) {function RotateLeft(lValue, iShiftBits) {return (lValue<<iShiftBits) | (lValue>>>(32-iShiftBits));}function AddUn…

vue中的时间过滤器

//全局过滤器&#xff0c;进行时间的格式化//所谓的全局过滤器即使所有的vue实例都共享的Vue.filter(dateFormat ,function(dateStr, pattern""){//根据给定的时间字符串&#xff0c;得到特定的时间var dt new Date(dateStr)//yyy---mm-ddvar y dt.getFullYear() /…

windows线程同步-原子操作-Interlocked系列函数(用户模式)

Interlocked系列函数用来保证原子访问。InterlockedExchangeAdd提供保证long类型的原子操作。InterlockedExchangeAdd64提供long long 64位的原子操作。搞不懂为什么不提供int类型的&#xff0c;int类型转换成long类型就是2个不同内存地址的变量&#xff0c;再来对long类型进行…

java 比较器comparator_Java中比较器的使用Compare和Comparator

Comparable和Comparator接口都是为了对类进行比较&#xff0c;众所周知&#xff0c;诸如Integer&#xff0c;double等基本数据类型&#xff0c;java可以对他们进行比较&#xff0c;而对于类的比较&#xff0c;需要人工定义比较用到的字段比较逻辑。可以把Comparable理解为内部比…

20160127:开始学VBA:(三)、判断语句

IIF函数判断 Sub 判断4() Range("a3") IIf(Range("a1") < 0, "负数或零", "负数")End Sub Sub 判断1() 单条件判断 If Range("a1").Value > 0 Then Range("b1") "正数" Else Range(…

java jdk中的归并排序实现

在Arrays.java中的sort中public static void sort(Object[] a, int fromIndex, int toIndex) {if (LegacyMergeSort.userRequested)legacyMergeSort(a, fromIndex, toIndex);elseComparableTimSort.sort(a, fromIndex, toIndex);}/** To be removed in a future release. */pri…

LeetCode.3-最长无重复字符子串(Longest Substring Without Repeating Characters)

这是悦乐书的第341次更新&#xff0c;第365篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Medium级别的第2题Longest Substring Without Repeating Characters&#xff08;顺位题号是3&#xff09;。给定一个字符串&#xff0c;找到最长无重复字符子字符串的长度。例如&am…

java代码操作git_JGit--实现Git命令操作的Java API

问题来源:最近在做一个项目&#xff0c;其中有一块需要用户上传代码到服务器中&#xff0c;然后分析用户所传的代码&#xff0c;传代码最直接的方式就是用户打个包上传&#xff0c;但是后期再分析代码的时候还要代码实现解压上传的代码&#xff0c;操作起来比较复杂。解决方案与…

Python学习(一) 安装,环境搭建,IDE

第一篇废话太多了&#xff0c;我的博客最主要的是给自己看的&#xff0c;大家觉得还凑合也可以看看&#xff0c;能说自己想法的就更好了&#xff0c;因为一个人的思想是有局限性的。集思广益&#xff0c;自己的认知才不会被禁锢。 注&#xff1a;其他的系统没装&#xff0c;在W…

桑叶黑芝麻糊,从头到脚通补

人体通补手册:丹道医学中的养命之术/武国忠著. —南京&#xff1a;江苏人民出版社&#xff0c;2009.8&#xff08;国医健康绝学系列&#xff09;ISBN 978-7-214-05938-3 桑叶黑芝麻糊&#xff0c;从头到脚通补 桑叶味甘、苦&#xff0c;性寒&#xff0c;可以入肝、肺经&#xf…

CSS jQuery制作漂亮的文字模糊效果

CSS3漂亮的模糊效果 运用CSS3 和 jQuery 以及其他javascript框架&#xff0c;将 CSS模糊效果发挥到极致. 本文底部可提供下载以及预览&#xff0c;并且包含了所有需要的文件包。 1. 烟雾模糊效果&#xff1a; 2.彩色灯晕效果 3. 鼠标悬浮模糊效果 4, 模糊效果 5&#xff0c;随机…

java 三维全景_3D开发-全景技术基础

全景&#xff0c;英文名(Panorama)&#xff0c;又被称为3D实景&#xff0c;是一种新兴的富媒体技术&#xff0c;其与视频&#xff0c;声音&#xff0c;图片等传统的流媒体最大的区别是“可操作&#xff0c;可交互”。 全景分为虚拟现实和3D实景两种。虚拟现实是利用maya等软件&…

HAProxy基础

HAProxy HAProxy是法国开发者Willy Tarreau 开发的一个开源然教案&#xff0c;是一款具备高并发、高性能的TCP和HTTP负载均衡器&#xff0c;支持基于cookie的持久性&#xff0c;自动故障切换&#xff0c;支持正则表达式及web状态统计。 HAProxy功能 HAProxy是TCP/HTTP反向代理服…