题目:http://uoj.ac/problem/347

   https://www.luogu.org/problemnew/show/P4220

先写了暴力分的44分。那个两棵树、其中一棵是编号连续的链、边权都是1的点好像可以线段树合并,但没写。

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
ll rdn()
{
ll ret=;bool fx=;char ch=getchar();
while(ch>''||ch<''){if(ch=='-')fx=;ch=getchar();}
while(ch>=''&&ch<='')ret=ret*+ch-'',ch=getchar();
return fx?ret:-ret;
}
ll Mx(ll a,ll b){return a>b?a:b;}
const int N=1e5+,M=,K=;
int n,hd[][N],xnt,to[][N<<],nxt[][N<<];
ll w[][N<<],dis[N],ans,ds2[M][M]; bool flag;
void add(int t,int x,int y,ll z){to[t][++xnt]=y;nxt[t][xnt]=hd[t][x];hd[t][x]=xnt;w[t][xnt]=z;}
void chk(int cr,int fa)
{
for(int i=hd[][cr],v;i;i=nxt[][i])
if((v=to[][i])!=fa)
{
bool fg=;ll tw;
for(int j=hd[][cr];j;j=nxt[][j])
if(to[][j]==v){fg=;tw=w[][j];break;}
if(!fg||tw!=w[][i]){flag=;return;}
for(int j=hd[][cr];j;j=nxt[][j])
if(to[][j]==v){fg=;tw=w[][j];break;}
if(!fg||tw!=w[][i]){flag=;return;}
chk(v,cr);if(flag)return;
}
}
void dfs1(int cr,int fa)
{
ll mx=,mx2=;
for(int i=hd[][cr],v;i;i=nxt[][i])
if((v=to[][i])!=fa)
{
dfs1(v,cr);ll tp=dis[v]+w[][i];
if(tp>mx)mx2=mx,mx=tp;
else if(tp>mx2)mx2=tp;
}
ans=Mx(ans,mx+mx2);dis[cr]=mx;
}
void dfs2(int cr,int fa,ll lj,int t,int rt)
{
ds2[rt][cr]+=lj;
for(int i=hd[t][cr],v;i;i=nxt[t][i])
if((v=to[t][i])!=fa)dfs2(v,cr,lj+w[t][i],t,rt);
}
void solve2()
{
for(int t=;t<;t++)
for(int i=;i<=n;i++)dfs2(i,,,t,i);
for(int i=;i<=n;i++)
for(int j=i+;j<=n;j++)ans=Mx(ans,ds2[i][j]);
printf("%lld\n",ans);
}
int main()
{
n=rdn();
for(int t=;t<;t++)
{
ll z;xnt=;
for(int i=,u,v;i<n;i++)
u=rdn(),v=rdn(),z=rdn(),add(t,u,v,z),add(t,v,u,z);
}
if(n<=){solve2();return ;}
chk(,);if(!flag){dfs1(,);printf("%lld\n",ans*);return ;}
return ;
}

正解要边分治和虚树,现在还不会。所以用了随机化。

卡时间可以调用 clock() ,返回的是 CPU 周期,CLOCKS_PER_SEC 返回的是一秒运行了几个 CPU 周期,所以 clock() / CLOCKS_PER_SEC 可以算出运行了几秒。

随机一个根,暴力算每个点到这个根的距离(3个距离求和),把距离当前根最远的那个点设为新的根,同时更新答案。做几次之后就再随机一个根。这个间隙可以小一些,10或者8之类的。

可以打 vis[ ] 标记,作过根的点就不再作根了。

还是通不过 UOJ 的 hack 数据。

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<ctime>
#define ll long long
#define db double
using namespace std;
ll rdn()
{
ll ret=;bool fx=;char ch=getchar();
while(ch>''||ch<''){if(ch=='-')fx=;ch=getchar();}
while(ch>=''&&ch<='')ret=ret*+ch-'',ch=getchar();
return fx?ret:-ret;
}
ll Mx(ll a,ll b){return a>b?a:b;}
const int N=1e5+,TL=;
int n,hd[][N],xnt,to[][N<<],nxt[][N<<];
ll w[][N<<],dis[N],ds1[][],ans;
bool vis[N];
void add(int t,int x,int y,ll z){to[t][++xnt]=y;nxt[t][xnt]=hd[t][x];hd[t][x]=xnt;w[t][xnt]=z;}
int clk(){return (db)clock()/CLOCKS_PER_SEC*;}//ms
void dfs1(int cr,int fa,ll lj,int t,int rt)
{
ds1[rt][cr]+=lj;
for(int i=hd[t][cr],v;i;i=nxt[t][i])
if((v=to[t][i])!=fa)dfs1(v,cr,lj+w[t][i],t,rt);
}
void solve1()
{
for(int t=;t<;t++)
for(int i=;i<=n;i++)dfs1(i,,,t,i);
for(int i=;i<=n;i++)
for(int j=i+;j<=n;j++)ans=Mx(ans,ds1[i][j]);
printf("%lld\n",ans);
}
void dfs(int cr,int fa,ll lj,int t)
{
dis[cr]+=lj;
for(int i=hd[t][cr],v;i;i=nxt[t][i])
if((v=to[t][i])!=fa)dfs(v,cr,lj+w[t][i],t);
}
int cz(int rt)
{
for(int i=;i<=n;i++)dis[i]=;
for(int t=;t<;t++)dfs(rt,,,t);
int ret=;
for(int i=;i<=n;i++)
{
if(dis[i]>ans)ans=dis[i];
if(!vis[i]&&dis[i]>dis[ret])ret=i;
}
return ret;
}
int main()
{
n=rdn();ll z;
for(int t=;t<;t++,xnt=)
for(int i=,u,v;i<n;i++)
u=rdn(),v=rdn(),z=rdn(),add(t,u,v,z),add(t,v,u,z);
if(n<=){solve1();return ;}
int st=clk(); srand(time());srand(rand());
int rt=rand()%n+,T=;
while(clk()-st<TL)
{
T++; if(T==)rt=rand()%n+,T=;
if(vis[rt]){T=;continue;}vis[rt]=;
rt=cz(rt);if(!rt)break;
}
printf("%lld\n",ans);
return ;
}

UOJ 347(洛谷4220) 【WC2018】通道——随机化的更多相关文章

  1. uoj#348/洛谷P4221 [WC2018]州区划分(FWT)

    传送门(uoj) 传送门(洛谷) 全世界都会子集卷积就咱不会--全世界都在写\(FMT\)就咱只会\(FWT\)-- 前置芝士 或运算\(FWT\)或者\(FMT\) 左转洛谷模板区,包教包会 子集卷 ...

  2. 洛谷P4220 [WC2018]通道(边分治+虚树)

    题面 传送门 题解 代码不就百来行么也不算很长丫 虽然这题随机化贪心就可以过而且速度和正解差不多不过我们还是要好好学正解 前置芝士 边分治 米娜应该都知道点分治是个什么东西,而边分治,顾名思义就是对边 ...

  3. 2018.08.09洛谷P3959 宝藏(随机化贪心)

    传送门 回想起了自己赛场上乱搜的20分. 好吧现在也就是写了一个随机化贪心就水过去了,不得不说随机化贪心大法好. 代码: #include<bits/stdc++.h> using nam ...

  4. UOJ #55 & 洛谷 P3920 紫荆花之恋 —— 动态点分治+替罪羊树

    题目:http://uoj.ac/problem/55 https://www.luogu.org/problemnew/show/P3920 参考博客:https://www.cnblogs.com ...

  5. [uoj#34] [洛谷P3803] 多项式乘法(FFT)

    新技能--FFT. 可在 \(O(nlogn)\) 时间内完成多项式在系数表达与点值表达之间的转换. 其中最关键的一点便为单位复数根,有神奇的折半性质. 多项式乘法(即为卷积)的常见形式: \[ C_ ...

  6. 洛谷 P3825 [NOI2017]游戏 【2-SAT+状压】

    UOJ和洛谷上能A,bzoj 8ms即WA,现在也不是知道为啥--因为我太弱了 先看数据范围发现d非常小,自然想到了状压. 所以先假装都是只能跑两种车的,这显然就是个2-SAT问题了:对于x场没有hx ...

  7. 洛谷P3688/uoj#291. [ZJOI2017]树状数组

    传送门(uoj) 传送门(洛谷) 这里是题解以及我的卡常数历程 话说后面那几组数据莫不是lxl出的这么毒 首先不难发现这个东西把查询前缀和变成了查询后缀和,结果就是查了\([l-1,r-1]\)的区间 ...

  8. 洛谷 P2827 BZOJ 4721 UOJ #264 蚯蚓

    题目描述 本题中,我们将用符号表示对c向下取整,例如:. 蛐蛐国最近蚯蚓成灾了!隔壁跳蚤国的跳蚤也拿蚯蚓们没办法,蛐蛐国王只好去请神刀手来帮他们消灭蚯蚓. 蛐蛐国里现在共有n只蚯蚓(n为正整数).每只 ...

  9. 洛谷 P2503 [HAOI2006]均分数据 随机化贪心

    洛谷P2503 [HAOI2006]均分数据(随机化贪心) 现在来看这个题就是水题,但模拟赛时想了1个小时贪心,推了一堆结论,最后发现贪心做 不了, 又想了半个小时dp 发现dp好像也做不了,在随机化 ...

随机推荐

  1. ansible之template模块

    趁着最近在搞ansible,现在学习了一波template模块的用法: 1.使用template模块在jinja2中引用变量,先来目录结构树 [root@master ansible]# tree . ...

  2. MFC各种属性定义及DLL使用理解

    ps:如果需要使用第三方动态库,需要下面几个因素配置 1.第三方库提供的源文件[C/C++,常规,附加包含目录] 2.动态库[和生成的exe放一起] 3.LIB文件的目录[链接器,附加库目录] 4.L ...

  3. curl使用介绍

    linux curl是通过url语法在命令行下上传或下载文件的工具软件,它支持http,https,ftp,ftps,telnet等多种协议,常被用来抓取网页和监控Web服务器状态. 一.Linux ...

  4. xlrd基本操作

    #coding=utf-8import xlrd def read_excel(): workbook = xlrd.open_workbook('people.xlsx') sheet2 = wor ...

  5. SPOJ - PGCD Primes in GCD Table(莫比乌斯反演)

    http://www.spoj.com/problems/PGCD/en/ 题意: 给出a,b区间,求该区间内满足gcd(x,y)=质数的个数. 思路: 设f(n)为 gcd(x,y)=p的个数,那么 ...

  6. Codeforces Round #419 (Div. 2) E. Karen and Supermarket(树形dp)

    http://codeforces.com/contest/816/problem/E 题意: 去超市买东西,共有m块钱,每件商品有优惠卷可用,前提是xi商品的优惠券被用.问最多能买多少件商品? 思路 ...

  7. 发现TypeScript中同名interface接口会自动合并的特性

    今天在学习怎么用TypeScript给jQuery写扩展插件时发现一个很有趣的事情

  8. Linux:shell脚本字符显示特殊颜色效果

    shell脚本字符显示颜色和特殊效果 (一) 颜色显示 1)字符颜色显示 #!/bin/bash #字符颜色显示 #-e:允许echo使用转义 #\[:开始位 #\[0m:结束位 #\033等同于\e ...

  9. jquery3.1.1报错Uncaught TypeError: a.indexOf is not a function

    jquery3.1.1报错Uncaught TypeError: a.indexOf is not a function 使用1.9就没有问题,解决办法: 就是把写的代码中: $(window).lo ...

  10. spring boot 教程(二)模板依赖

    在Spring boot中有一个很重要的概念,叫做约定优于配置--软件开发的简约原则.所以Spring boot会按照约定好的文件位置去找我们的包和类. 默认配置 Spring Boot默认提供静态资 ...