【CF666B】World Tour(贪心,最短路)
题意:给你一张有向图,叫你给出四个点的序列a,b,c,d,使得这四个点依次间的最短路之和最大。(4 ≤ n ≤ 3000, 3 ≤ m ≤ 5000)
思路:O(n4)可用来对拍
我们需要O(n2)级别的算法
若枚举c,d,预处理出x到b比较远的3个x,d到y比较远的3个y,时间复杂度O(9n2)
为什么是3个而不是2个?
abc已枚举,若d的备选是ab就要GG,所以应该多一个备用,也就是三个点
var c,d:array[..,..,..]of longint;
head,vet,next,b,flag,q,x,y:array[..]of longint;
dis:array[..]of longint;
save:array[..,..]of longint;
n,m,tot,i,s1,s2,s3,s4,a1,b1,c1,d1,ans,j,k,s,p1,q1:longint; procedure add(a,b:longint);
begin
inc(tot);
next[tot]:=head[a];
vet[tot]:=b;
head[a]:=tot;
end; procedure bfs(x:longint);
var t,w,e,u,v:longint;
begin
fillchar(b,sizeof(b),);
fillchar(dis,sizeof(dis),);
t:=; w:=; q[]:=x; b[x]:=; dis[x]:=;
while t<=w do
begin
u:=q[t]; inc(t);
e:=head[u];
while e<> do
begin
v:=vet[e];
if b[v]= then
begin
dis[v]:=dis[u]+;
b[v]:=;
inc(w); q[w]:=v;
end;
e:=next[e];
end;
end;
end; begin
//assign(input,'1.in'); reset(input);
//assign(output,'1.out'); rewrite(output);
readln(n,m);
for i:= to m do
begin
readln(x[i],y[i]);
add(x[i],y[i]);
end; for i:= to n do
begin
bfs(i);
k:=; s:=;
fillchar(flag,sizeof(flag),);
for j:= to n do
if (flag[j]=)and(dis[j]>s) then
begin
k:=j; s:=dis[j];
end;
flag[k]:=; c[i,,]:=k; c[i,,]:=s;
k:=; s:=;
for j:= to n do
if (flag[j]=)and(dis[j]>s) then
begin
k:=j; s:=dis[j];
end;
flag[k]:=; c[i,,]:=k; c[i,,]:=s;
k:=; s:=;
for j:= to n do
if (flag[j]=)and(dis[j]>s) then
begin
k:=j; s:=dis[j];
end;
flag[k]:=; c[i,,]:=k; c[i,,]:=s; // x---->c[i] ,,
for j:= to n do save[i,j]:=dis[j];
end; fillchar(head,sizeof(head),);
tot:=;
for i:= to m do add(y[i],x[i]); for i:= to n do
begin
bfs(i);
k:=; s:=;
fillchar(flag,sizeof(flag),);
for j:= to n do
if (flag[j]=)and(dis[j]>s) then
begin
k:=j; s:=dis[j];
end;
flag[k]:=; d[i,,]:=k; d[i,,]:=s;
k:=; s:=;
for j:= to n do
if (flag[j]=)and(dis[j]>s) then
begin
k:=j; s:=dis[j];
end;
flag[k]:=; d[i,,]:=k; d[i,,]:=s;
k:=; s:=;
for j:= to n do
if (flag[j]=)and(dis[j]>s) then
begin
k:=j; s:=dis[j];
end;
flag[k]:=; d[i,,]:=k; d[i,,]:=s; // d[i] ---->i
end; s1:=; s2:=; s3:=; s4:=; ans:=-maxlongint;
for b1:= to n do
for c1:= to n do
if save[b1,c1]> then
for p1:= to do
for q1:= to do
begin
d1:=c[c1,p1,];
a1:=d[b1,q1,]; //a1-->b1-->c1-->d1
if (a1<>b1)and(a1<>c1)and(a1<>d1)and(b1<>c1)and(b1<>d1)and(c1<>d1) then
if d[b1,q1,]+c[c1,p1,]+save[b1,c1]>ans then
begin
s1:=a1; s2:=b1; s3:=c1; s4:=d1;
ans:=d[b1,q1,]+c[c1,p1,]+save[b1,c1];
end;
end;
writeln(s1,' ',s2,' ',s3,' ',s4); //close(input);
//close(output);
end.
【CF666B】World Tour(贪心,最短路)的更多相关文章
- CF666B. World Tour
CF666B. World Tour 题意: 给定一张边权为 1 的有向图,求四个不同点 A, B, C, D 使得 dis(A, B) + dis(B, C) + dis(C, D) 取最大值,di ...
- Codeforces Round #349 (Div. 1) B. World Tour 暴力最短路
B. World Tour 题目连接: http://www.codeforces.com/contest/666/problem/B Description A famous sculptor Ci ...
- [CSP-S模拟测试]:午餐(贪心+最短路)
题目传送门(内部题115) 输入格式 第一行两个正整数$n,m$. 接下来$m$行,每行$4$个正整数$u_j,v_j,L_j,R_j$. 接下来一行$n$个数,若第$i$个数为$1$,则$i$号同学 ...
- ZOJ 3946 Highway Project 贪心+最短路
题目链接: http://www.icpc.moe/onlinejudge/showProblem.do?problemCode=3946 题解: 用dijkstra跑单元最短路径,如果对于顶点v,存 ...
- Codeforces 667D World Tour【最短路+枚举】
垃圾csdn,累感不爱! 题目链接: http://codeforces.com/contest/667/problem/D 题意: 在有向图中找到四个点,使得这些点之间的最短距离之和最大. 分析: ...
- Codeforces Round #349 (Div. 2) D. World Tour 暴力最短路
D. World Tour A famous sculptor Cicasso goes to a world tour! Well, it is not actually a world-wid ...
- cf1076d 贪心最短路
#include<bits/stdc++.h> #include<queue> using namespace std; #define maxn 300005 #define ...
- CF 360 E Levko and Game —— 贪心+最短路
题目:http://codeforces.com/contest/360/problem/E 首先,每条边不是选 \( l[i] \) 就是选 \( r[i] \): 做法就是先把边权都设成 \( r ...
- Codeforces 360E 贪心 最短路
题意及思路:https://blog.csdn.net/huanghongxun/article/details/49846927 在假设所有边都是最大值的情况下,如果第一个人能比第二个人先到,那就缩 ...
- WC2019游记 && 课件
WC2019 游记 课件 wc2019.zip_免费高速下载|百度网盘-分享无限制 提取码: un6z day 0 打飞机去广州... 在飞机上刷了爱乐(le)之城, 相当好看... 广二好大! 哈三 ...
随机推荐
- Forbidden You don't have permission to access /phpStudyTest/application/index/controller/Index.php on this server.
发生情况:将thinkPHP从官网上下了 http://thinkphp.cn 然后安装了phpstudy和PHPstorm,并将thinkPHP解压到www路径下 在用PHPstorm打开 thi ...
- 51nod——1391 01串(字符串、前缀和)
好像这题是4级题下放2级? 预处理:求每个位置 x 左区间 [ 0 , x ] 中 1 比 0 多的数量和右区间 ( x , n - 1 ] 中 0 比 1 多的数量(少就是负的).相当于求两个前缀和 ...
- SSH框架面试总结----1
1:struts2的工作流程 1)客户端浏览器发出HTTP请求. 2)根据web.xml配置,HTTP请求会被FilterDispatcher接收. 3)根据struts.xml,找到对应的Actio ...
- linux中vim永久显示行号、开启语法高亮
vim ~/.vimrc 进入insert模式,在最后加二行 syntax on set nu! 保存收工. 设置用视图模式的缩进为4个空格 set smartindent set tabstop=4 ...
- centos7 killall 命令
centos7精简安装后,使用中发现没有killall命令. 安装这个包即可: yum install psmisc
- list_add_tail()双向链表实现分析
struct list_head { struct list_head *next, *prev; }; list_add_tail(&buf->vb.queue, &vid-& ...
- Solution: 最近公共祖先·一 [hiho一下 第十三周]
题目1 : 最近公共祖先·一 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho最近发现了一个神奇的网站!虽然还不够像58同城那样神奇,但这个网站仍然让小Ho乐在其中 ...
- Fiddler证书安装不成功
Fiddler 抓包https配置 提示creation of the root certificate was not successful 证书安装不成功 原文链接 在使用Fiddler抓包时,我 ...
- Apache ant 配置
ANT_HOME C:\Program Files(D)\apache-ant-1.10.1Path %ANT_HOME%/binant -v
- [转] vuex最简单、最直白、最全的入门文档
前言 我们经常用element-ui做后台管理系统,经常会遇到父组件给子组件传递数据,下面一个简单的例子,点击按钮,把弹框显示变量数据通过子组件的props属性传递,子组件通过$emit事件监听把数据 ...