CF #349 div1 B. World Tour
题目链接:http://codeforces.com/problemset/problem/666/B
大意是给一张有向图,选取四个点,使得走这四个点,任意两个点之间走最短路,总距离最长。
3000个点直接floyd肯定不行,但是注意到任意每条路距离都是1,其实可以枚举所有源点作bfs,求出距离数组。
然后对于每个点求出以这个点为入点和出点距离最大的3个点。再根据这个信息,枚举四个点中的中间两个,再枚举这两个点距离他们最远的那3*3种情况,判断是否有重复,没有重复的话,更新答案。
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <cstring>
#include <cstdio>
#include <math.h>
#include <queue>
#include <stack>
#include <map>
#include <set>
using namespace std; const int N=; vector<int>edge[N];
int dis[N][N];
int n;
void bfs(int s) {
queue< pair<int,int> >que;
que.push(make_pair(s,));
dis[s][s]=;
while (!que.empty()) {
pair<int,int> now=que.front();
que.pop();
int u=now.first,d=now.second;
for (int i=;i<edge[u].size();i++) {
int v=edge[u][i];
if (dis[s][v]>=) continue;
dis[s][v]=d+;
que.push(make_pair(v,d+));
}
}
}
pair<int,int> in[N][],out[N][];
void upd(pair<int,int> x,pair<int,int> *y) {
for (int i=;i<;i++) {
if (x>y[i]) {
for (int j=;j>i;j--) {
y[j]=y[j-];
}
y[i]=x;
break;
}
}
}
void solve() {
memset(dis,-,sizeof dis);
for (int i=;i<=n;i++){
bfs(i);
for (int j=;j<;j++) {
in[i][j]=make_pair(-,-);
out[i][j]=make_pair(-,-);
}
}
for (int i=;i<=n;i++) {
for (int j=;j<=n;j++) {
if (i==j) continue;
if (dis[i][j]==-) continue;
upd(make_pair(dis[i][j],i),in[j]);
upd(make_pair(dis[i][j],j),out[i]);
}
}
int best=;
int a=-,b=-,c=-,d=-;
for (int i=;i<=n;i++) {
for (int j=;j<=n;j++) {
if (i==j) continue;
if (dis[i][j]==-) continue;
for (int p=;p<;p++) {
if (in[i][p].first==-) continue;
int ii=in[i][p].second;
if (ii==j) continue;
for (int q=;q<;q++) {
if (out[j][q].first==-) continue;
int jj=out[j][q].second;
if (jj==i||jj==ii) continue; int tot=dis[ii][i]+dis[i][j]+dis[j][jj];
if (tot>best) {
best=tot;
a=ii;b=i;c=j;d=jj;
}
}
}
}
}
printf("%d %d %d %d\n",a,b,c,d);
}
int main () {
int m;
scanf("%d %d",&n,&m);
for (int i=;i<=m;i++) {
int u,v;
scanf("%d %d",&u,&v);
edge[u].push_back(v);
}
solve();
return ;
}
CF #349 div1 B. World Tour的更多相关文章
- CF#462 div1 D:A Creative Cutout
CF#462 div1 D:A Creative Cutout 题目大意: 原网址戳我! 题目大意: 在网格上任选一个点作为圆中心,然后以其为圆心画\(m\)个圆. 其中第\(k\)个圆的半径为\(\ ...
- CF#345 (Div1)
论蒟蒻如何被cf虐 以下是身败名裂后的题解菌=========== Div1 A.Watchmen 有n个点,每个点有一个坐标.求曼哈顿距离=欧几里得距离的点对数量. 只需要统计x或y一样的点对数量. ...
- CF #356 div1 A. Bear and Prime 100
题目链接:http://codeforces.com/contest/679/problem/A CF有史以来第一次出现交互式的题目,大致意思为选择2到100中某一个数字作为隐藏数,你可以询问最多20 ...
- CF #228 div1 B. Fox and Minimal path
题目链接:http://codeforces.com/problemset/problem/388/B 大意是用不超过1000个点构造一张边权为1的无向图,使得点1到点2的最短路的个数为给定值k,其中 ...
- CF #335 div1 A. Sorting Railway Cars
题目链接:http://codeforces.com/contest/605/problem/A 大意是对一个排列进行排序,每一次操作可以将一个数字从原来位置抽出放到开头或结尾,问最少需要操作多少次可 ...
- CF #345 Div1 D Zip-line
题目链接:http://codeforces.com/contest/650/problem/D 大意是给一个数组,若干询问,每一次把一个数字改为另一个数字,问当前数组最长上升子序列,询问之间是独立的 ...
- CF #299 div1 B. Tavas and Malekas KMP-next数组
题目链接:http://codeforces.com/contest/536/problem/B 一个原始字符串,一个未知字符串,每一次从pos[i]开始覆盖未知字符串,问最后字符串的形式,以及判断过 ...
- CF #93 div1 B. Password KMP/Z
题目链接:http://codeforces.com/problemset/problem/126/B 大意:给一个字符串,问最长的既是前缀又是后缀又是中缀(这里指在内部出现)的子串. 我自己的做法是 ...
- CF #284 div1 D. Traffic Jams in the Land 线段树
大意是有n段路,每一段路有个值a,通过每一端路需要1s,如果通过这一段路时刻t为a的倍数,则需要等待1s再走,也就是需要2s通过. 比较头疼的就是相邻两个数之间会因为数字不同制约,一开始想a的范围是2 ...
随机推荐
- 转换器3:手写PHP转Python编译器,词法部分
上周写了<ThinkPhp模板转Flask.Django模板> 一时技痒,自然而然地想搞个大家伙,把整个PHP程序转成Python.不比模板,可以用正则匹配偷懒,这次非写一个Php编译器不 ...
- Mac上关于shell使用Python3和C++11声明
1.使用Python3 Mac上的shell上自带的Python版本是2.7,当需要使用Python3时,下载安装好Python时,在shell上敲入Python发现却还是显示Python2.7,这是 ...
- 1257: [CQOI2007]余数之和sum
1257: [CQOI2007]余数之和sum Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 2001 Solved: 928[Submit][Sta ...
- multiSelect 下拉多选插件
multiSelect是一款很好用的下拉多选插件,可以在下拉框中实现多选框,全选及取消全选等方法.使用方法:1.引用 multiSelect.css及 multiSelect.js.下载地址 http ...
- Burpsuite暴力破解
神器:burpsuite 闲话不多说,直接开搞 1.打开文件BurpLoader.jar,进入Proxy--Options,启用代理 2.打开浏览器(IE),进入Internet选项-连接-局域网设置 ...
- 详解meta标签
Meta标签详解,在网上转的,希望对大家有用 引言 您的个人网站即使做得再精彩,在"浩瀚如海"的网络空间中,也如一叶扁舟不易为人发现,如何推广个人网站,人们首先想到的方法无外乎以下 ...
- php与mysql的常规使用
<?php header("Content-type:text/html;charset=GBK"); /* 通常,php网页中完成有关数据库的操作,首先,需要如下代码: $ ...
- Android之XListView下拉刷新,更新网络美女图
一.简介: 下拉刷新是一种特定的手动刷新交互,和其他的同类操作不同的地方在于它采用了更加直觉的下拉操作,所以它的交互足够清晰明显. 下拉刷新主要用在类似ListView这样的控件,设计下拉刷新有三 ...
- Python总的字符串
Python总最常用的类型,使用单引号双引号表示.三引号之间的字符串可以跨多行并且可以是原样输出的. Python中不支持字符类型,字符也是字符串. ---字符串的CRUD [1:3] [:6] -- ...
- JSON对象转换成字符串【JSON2.JS】
下载地址 https://github.com/douglascrockford/JSON-js JSON.JS和JSON2.JS的区别 JSON.JS使用的方法名称不同,用的是toJSONStrin ...