UOJ 347(洛谷4220) 【WC2018】通道——随机化
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】通道——随机化的更多相关文章
- uoj#348/洛谷P4221 [WC2018]州区划分(FWT)
传送门(uoj) 传送门(洛谷) 全世界都会子集卷积就咱不会--全世界都在写\(FMT\)就咱只会\(FWT\)-- 前置芝士 或运算\(FWT\)或者\(FMT\) 左转洛谷模板区,包教包会 子集卷 ...
- 洛谷P4220 [WC2018]通道(边分治+虚树)
题面 传送门 题解 代码不就百来行么也不算很长丫 虽然这题随机化贪心就可以过而且速度和正解差不多不过我们还是要好好学正解 前置芝士 边分治 米娜应该都知道点分治是个什么东西,而边分治,顾名思义就是对边 ...
- 2018.08.09洛谷P3959 宝藏(随机化贪心)
传送门 回想起了自己赛场上乱搜的20分. 好吧现在也就是写了一个随机化贪心就水过去了,不得不说随机化贪心大法好. 代码: #include<bits/stdc++.h> using nam ...
- UOJ #55 & 洛谷 P3920 紫荆花之恋 —— 动态点分治+替罪羊树
题目:http://uoj.ac/problem/55 https://www.luogu.org/problemnew/show/P3920 参考博客:https://www.cnblogs.com ...
- [uoj#34] [洛谷P3803] 多项式乘法(FFT)
新技能--FFT. 可在 \(O(nlogn)\) 时间内完成多项式在系数表达与点值表达之间的转换. 其中最关键的一点便为单位复数根,有神奇的折半性质. 多项式乘法(即为卷积)的常见形式: \[ C_ ...
- 洛谷 P3825 [NOI2017]游戏 【2-SAT+状压】
UOJ和洛谷上能A,bzoj 8ms即WA,现在也不是知道为啥--因为我太弱了 先看数据范围发现d非常小,自然想到了状压. 所以先假装都是只能跑两种车的,这显然就是个2-SAT问题了:对于x场没有hx ...
- 洛谷P3688/uoj#291. [ZJOI2017]树状数组
传送门(uoj) 传送门(洛谷) 这里是题解以及我的卡常数历程 话说后面那几组数据莫不是lxl出的这么毒 首先不难发现这个东西把查询前缀和变成了查询后缀和,结果就是查了\([l-1,r-1]\)的区间 ...
- 洛谷 P2827 BZOJ 4721 UOJ #264 蚯蚓
题目描述 本题中,我们将用符号表示对c向下取整,例如:. 蛐蛐国最近蚯蚓成灾了!隔壁跳蚤国的跳蚤也拿蚯蚓们没办法,蛐蛐国王只好去请神刀手来帮他们消灭蚯蚓. 蛐蛐国里现在共有n只蚯蚓(n为正整数).每只 ...
- 洛谷 P2503 [HAOI2006]均分数据 随机化贪心
洛谷P2503 [HAOI2006]均分数据(随机化贪心) 现在来看这个题就是水题,但模拟赛时想了1个小时贪心,推了一堆结论,最后发现贪心做 不了, 又想了半个小时dp 发现dp好像也做不了,在随机化 ...
随机推荐
- sqoop2-1.99.5-cdh5.5.4.tar.gz的部署搭建
不多说,直接上干货! 首先,说下博主我,为什么,好端端的Sqoop1用的好好的,然后又安装和学习Sqoop2? 因为,在Cloudera Hue里的Sqoop,是需要Sqoop2. HUE配置文件hu ...
- bzoj1623 / P2909 [USACO08OPEN]牛的车Cow Cars
P2909 [USACO08OPEN]牛的车Cow Cars 显然的贪心. 按速度从小到大排序.然后找车最少的车道,查询是否能填充进去. #include<iostream> #inclu ...
- 算法准备-分治算法解决第k位数的线性查找
由作业士兵排队问题引出的 在一个划分成网格的操场上,n个士兵散乱地站在网格点上.网格点由整数最表(x,y)表示.士兵可以沿着网格边上.下.左.右移动一步,但在同一时刻一个网格上只能有一名士兵.按照军官 ...
- ZOJ 3747 Attack on Titans
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3747 题意: 现在有n个士兵进行排序,只有G.R.P三种士兵,要求至少有m ...
- 通过FISH和下一代测序检测肺腺癌ALK基因融合比较
ALK FISH探针是FDA批准的用于检测肺癌患者中ALK重排的方法,这些患者可能受益于ALK激酶抑制剂.FISH测定在技术上可能具有挑战性并且难以解释.已经有研究者提出以ALK免疫组织化学和下一代测 ...
- 理解flex布局
我们传统的布局方式是基于在盒子模型下的,依赖于display属性的,position属性的或者是float属性的,但是在传统的布局上面并不好布局; 比如我们想让某个元素垂直居中的话,我们常见的会让其元 ...
- Command(命令)
意图: 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化:对请求排队或记录请求日志,以及支持可撤消的操作. 适用性: 抽象出待执行的动作以参数化某对象,你可用过程语言中的回调(call ...
- BooStrap4文档摘录 2 Content, Component
Content Reboot:从新写了主要元素的排列. 本章讲了各种元素及其相关的类. ⚠️ 文档左上角有搜索栏. Components Alert✅ Badge✅ Button✅和Button gr ...
- HDU 2577 分情况多维DP
How to Type Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- iOS UI-自动布局(AutoLayout)
// // ViewController.m // IOS_0115_AutoLayout // // Created by ma c on 16/1/15. // Copyright (c) 201 ...