20140709

话说今天这个1个同学2002的题目真的有可总结性吗。

今天的结论是我的暴力又进化了,现在可以长达5KB,一节更比六节强。明天再来听评讲。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct edge
{
	long long to,d;
	edge* next;
};
edge* head[5002],v[10004];
long long ne=0,n,x,y,w,s,n1,n2;
long long ca[5002][15],si1[5002],si2[5002],divv[5002];
long long de[5002],di[5002];
bool in[5002];
void ad(long long a,long long b,long long c)
{
	v[ne].to=b;
	v[ne].d=c;
	v[ne].next=head[a];
	head[a]=&v[ne];
	ne++;
}
void ss1(long long p)
{
	in[p]=true;
	divv[p]=1;
	n1++;
	si1[p]=1;
	for (edge* z=head[p];z!=NULL;z=z->next)
	{
		if (z->to!=-1 && in[z->to]==false)
		{
			ss1(z->to);
			si1[p]+=si1[z->to];
		}
	}
	return;
}
void ss2(long long q)
{
	in[q]=true;
	divv[q]=2;
	n2++;
	si2[q]=1;
	for (edge* z=head[q];z!=NULL;z=z->next)
	{
		if (z->to!=-1 && in[z->to]==false)
		{
			ss2(z->to);
			si2[q]+=si2[z->to];
		}
	}
	return;
}
void dfs1(long long p)
{
	in[p]=true;
	for (edge* z=head[p];z!=NULL;z=z->next)
	{
		if (z->to!=-1 && in[z->to]==false)
		{
			de[z->to]=de[p]+1;
			di[z->to]=di[p]+z->d;
			dfs1(z->to);
			ca[z->to][0]=p;
		}
	}
	return;
}
void dfs2(long long q)
{
	in[q]=true;
	for (edge* z=head[q];z!=NULL;z=z->next)
	{
		if (z->to!=-1 && in[z->to]==false)
		{
			de[z->to]=de[q]+1;
			di[z->to]=di[q]+z->d;
			dfs2(z->to);
			ca[z->to][0]=q;
		}
	}
	return;
}
long long lca(long long g,long long h)
{
	long long k;
	if (de[g]>de[h])
	{
		k=g;
		g=h;
		h=k;
	}
	for (int i=14;i>=0;i--)
	{
		if (de[ca[h][i]]>=de[g])
		{
			h=ca[h][i];
		}
	}
	if (g==h) return h;
	for (int i=14;i>=0;i--)
	{
		if (ca[g][i]!=ca[h][i])
		{
			g=ca[g][i];
			h=ca[h][i];
		}
	}
	return ca[h][0];
}

long long gogogo(long long p,long long q,long long y)
{
	long long ans=0;
	n1=0;
	n2=0;
	memset(ca,0,sizeof(ca));
	memset(si1,0,sizeof(si1));
	memset(si2,0,sizeof(si2));
	memset(divv,0,sizeof(divv));
	memset(in,false,sizeof(in));
	divv[p]=1;
	divv[q]=2;
	ss1(p);
	ss2(q);
	long long t1=0,o1=p,t2=0,o2=q;
	memset(in,false,sizeof(in));
	in[p]=true;
	in[q]=true;
	for (edge* z=head[p];z!=NULL;z=z->next)
	{
		if (z->to!=-1 && in[z->to]==false && si1[z->to]>t1)
		{
			t1=si1[z->to];
			o1=z->to;
		}
		if (z->to!=-1) in[z->to]=true;
	}
	while (2*t1>n1 && n1!=1)
	{
		p=o1;
		t1=0;
		for (edge* z=head[p];z!=NULL;z=z->next)
		{
			if (z->to!=-1 && in[z->to]==false && si1[z->to]>t1)
			{
				t1=si1[z->to];
				o1=z->to;
			}
			if (z->to!=-1) in[z->to]=true;
		}
	}
	for (edge* z=head[q];z!=NULL;z=z->next)
	{
		if (z->to!=-1 && in[z->to]==false && si2[z->to]>t2)
		{
			t2=si2[z->to];
			o2=z->to;
		}
		if (z->to!=-1) in[z->to]=true;
	}
	while (2*t2>n2 && n2!=1)
	{
		q=o2;
		t2=0;
		for (edge* z=head[q];z!=NULL;z=z->next)
		{
			if (z->to!=-1 && in[z->to]==false && si2[z->to]>t1)
			{
				t2=si2[z->to];
				o2=z->to;
			}
			if (z->to!=-1) in[z->to]=true;
		}
	}
	for (long long i=0;i<15;i++)
	{
		ca[p][i]=0;
		ca[q][i]=0;
	}
	memset(di,0,sizeof(di));
	memset(de,0,sizeof(de));
	memset(in,false,sizeof(in));
	dfs1(p);
	dfs2(q);
	for (long long i=1;i<15;i++)
	{
		for (long long j=1;j<=n;j++)
		{
			ca[j][i]=ca[ca[j][i-1]][i-1];
		}
	}
	long long u1=0,u2=0;
	for (long long i=1;i<n;i++)
	{
		for (long long j=i+1;j<=n;j++)
		{
			if (divv[i]==1 && divv[j]==1)
			{
				u1+=di[i]+di[j]-2*di[lca(i,j)];
			}
		}
	}
	for (long long i=1;i<n;i++)
	{
		for (long long j=i+1;j<=n;j++)
		{
			if (divv[i]==2 && divv[j]==2)
			{
				u2+=di[i]+di[j]-2*di[lca(i,j)];
			}
		}
	}
	ans+=n1*n2*y+u1+u2;
	u1=0;
	u2=0;
	for (long long i=1;i<=n;i++)
	{
		if (divv[i]==1)
		{
			u1+=di[i];
		}
		else
		{
			u2+=di[i];
		}
	}
	ans+=n1*u2+n2*u1;
	return ans;
}

int main()
{
	freopen("testA.in","r",stdin);
	freopen("testA.out","w",stdout);
	cin>>n;
	for (long long i=0;i<=n;i++)
	{
		head[i]=NULL;
	}
	for (long long i=1;i<n;i++)
	{
		cin>>x>>y>>w;
		ad(x,y,w);
		ad(y,x,w);
	}
	s=1000000000000000;
	for (long long i=1;i<n;i++)
	{
		long long l,r;
		r=v[i*2-2].to;
		l=v[i*2-1].to;
		v[i*2-2].to=-1;
		v[i*2-1].to=-1;
		s=min(s,gogogo(l,r,v[i*2-2].d));
		v[i*2-2].to=r;
		v[i*2-1].to=l;
	}
	cout<<s;
	return 0;
}

  暴得一手好力

20140709,布布扣,bubuko.com

时间: 2024-10-20 13:34:54

20140709的相关文章

日记(2014-07-09) centos6.5 rpm方式安装gcc

由于实验室rpm包都被过滤掉,导致centos里面的yum无法下载安装软件.使用make编译各种软件源码发现没有gcc,g++.只好采用离线方式进行安装.话说yum无法下载rpm包,在下面的地址居然可以下载rpm压缩包.我这菜鸟没弄明白为什么. 在网上搜索资料安装成功,gcc和g++的rpm包下载地址http://fr2.rpmfind.net/linux/rpm2html/search.php?query=gcc-c%2B%2B&submit=Search+...&system=&

python知识点 2014-07-09

迭代协议: 类实现方法__next__,则可以使用for.while来实现迭代 使用iter或者next实现手工迭代: L = [1,2,3] I = iter(L) print(I.next()) 列表推导式: L = [x + y for x in 'abc' for y in 'lmn'] print(L) ['al', 'am', 'an', 'bl', 'bm', 'bn', 'cl', 'cm', 'cn'] python知识点 2014-07-09,布布扣,bubuko.com

工作日志2014-07-09

5:00起床 7:00到公司2.5元 12:00吃饭8元 19:30到家5元 今天支出:15.5元 工作时间: 1..ipa图片资源提取工具Extract http://blog.csdn.net/totogo2010/article/details/9061317 2.处理上拉加载效果异常(10:27未解决,不解决了) 工作日志2014-07-09,布布扣,bubuko.com

20140709,微软7月9日发布6个安全补丁

?? 大家好,我们是微软大中华区安全支持团队. 微软于北京时间2014年7月9日发布了6个新的安全公告,其中2个为严重等级,3个为重要等级,一个为中等等级,共修复Microsoft Windows,Internet Explorer和MicrosoftServer Software中的29个漏洞.与以往一样,我们推荐您安装所有更新,对于暂时只采用部分更新的用户,我们推荐您首先部署安全公告MS14-037和MS14-038来更新Internet Explorer (IE)和Windows Jour

Android 4.4 KitKat升级率已经接近18%(2014-07-09 07:29)

腾讯数码讯(编 译:张秀梅)按照惯例, 每个月的第一个星期的星期一谷歌都会发布最新一期Android版本分布图.从去年十月末谷歌发布Android 4.4 KitKat以来,截止到目前为止Android 4.4 KitKat的升级率以及占到了所有Android设备的18%份额,增长势头非常凶猛. 在 最新一个月的Android版本分布图中一个显著的特征就是除了Android 4.4 KitKat在保持快速持续得增长外,其他的Android在占有率上都有不同程度的下降.Android 4.4 Ki

20140709 NameNode bug2

我用命令:bin/hdfs  namenode  -format 格式化NameNode时报下面的错: 14/07/09 17:12:49 WARN namenode.NameNode: Encountered exception during format: org.apache.hadoop.hdfs.qjournal.client.QuorumException: Unable to check if JNs are ready for formatting. 1 exceptions t

[再寄小读者之数学篇](2014-07-09 不可约多项式与重根)

设 $\mathbb{P}$ 为数域, 如果 $p_1(x),\cdots,p_r(x)$ 是数域 $\mathbb{P}$ 上的 $r$ 个两两不同的首相系数为 $1$ 的不可约多项式, 证明: $f(x)=p_1(x)\cdots p_r(x)$ 在数域 $\mathbb{P}$ 上无重根. 证明: 用反证法. 若 $f(x)$ 有 $k(\geq 2)$ 重根 $x=a$, 则 $$\bee\label{poly_div} f(x)=p_1(x)\cdots p_r(x)=(x-a)^2g

20140709 datanode bug

hadoop2分布式安装后总是报这个bug 2014-07-06 08:22:40,506 FATAL org.apache.hadoop.hdfs.server.datanode.DataNode: Initialization failed for block pool Block pool <registering> (Datanode Uuid unassigned) service to hadoop3/192.168.56.203:9000 java.io.IOException:

2014-07-09 Java Web的学习(5)-----会话管理(Cookie和Session)

1.什么是会话 会话,牛津词典对其的解释是进行某活动连续的一段时间.从不同的层面看待会话,它有着类似但不全然相同的含义.比如,在web应用的用户看来,他打开浏览器访问一个电子商务网站,登录.并完成购物直到关闭浏览器,这是一个会话.而在web应用的开发者开来,用户登录时我需要创建一个数据结构以存储用户的登录信息,这个结构也叫做会话.因此在谈论会话的时候要注意上下文环境.而本文谈论的是一种基于HTTP协议的用以增强web应用能力的机制或者说一种方案,它不是单指某种特定的动态页面技术,而这种能力就是保