题目链接: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的更多相关文章

  1. CF#462 div1 D:A Creative Cutout

    CF#462 div1 D:A Creative Cutout 题目大意: 原网址戳我! 题目大意: 在网格上任选一个点作为圆中心,然后以其为圆心画\(m\)个圆. 其中第\(k\)个圆的半径为\(\ ...

  2. CF#345 (Div1)

    论蒟蒻如何被cf虐 以下是身败名裂后的题解菌=========== Div1 A.Watchmen 有n个点,每个点有一个坐标.求曼哈顿距离=欧几里得距离的点对数量. 只需要统计x或y一样的点对数量. ...

  3. CF #356 div1 A. Bear and Prime 100

    题目链接:http://codeforces.com/contest/679/problem/A CF有史以来第一次出现交互式的题目,大致意思为选择2到100中某一个数字作为隐藏数,你可以询问最多20 ...

  4. CF #228 div1 B. Fox and Minimal path

    题目链接:http://codeforces.com/problemset/problem/388/B 大意是用不超过1000个点构造一张边权为1的无向图,使得点1到点2的最短路的个数为给定值k,其中 ...

  5. CF #335 div1 A. Sorting Railway Cars

    题目链接:http://codeforces.com/contest/605/problem/A 大意是对一个排列进行排序,每一次操作可以将一个数字从原来位置抽出放到开头或结尾,问最少需要操作多少次可 ...

  6. CF #345 Div1 D Zip-line

    题目链接:http://codeforces.com/contest/650/problem/D 大意是给一个数组,若干询问,每一次把一个数字改为另一个数字,问当前数组最长上升子序列,询问之间是独立的 ...

  7. CF #299 div1 B. Tavas and Malekas KMP-next数组

    题目链接:http://codeforces.com/contest/536/problem/B 一个原始字符串,一个未知字符串,每一次从pos[i]开始覆盖未知字符串,问最后字符串的形式,以及判断过 ...

  8. CF #93 div1 B. Password KMP/Z

    题目链接:http://codeforces.com/problemset/problem/126/B 大意:给一个字符串,问最长的既是前缀又是后缀又是中缀(这里指在内部出现)的子串. 我自己的做法是 ...

  9. CF #284 div1 D. Traffic Jams in the Land 线段树

    大意是有n段路,每一段路有个值a,通过每一端路需要1s,如果通过这一段路时刻t为a的倍数,则需要等待1s再走,也就是需要2s通过. 比较头疼的就是相邻两个数之间会因为数字不同制约,一开始想a的范围是2 ...

随机推荐

  1. mysql数据库开始——增删改

    注释语法:#注释语 一.T-SQL语句注意:1.语句写完后用“分号:”代表这一句结束2.列结束用逗号,最后一列写完不用写逗号3.符号一定是英文的 关键字:主键:primary key外键:foreig ...

  2. gulp折腾日记——gulp-livereload

    大家好,虽然在博客园注册了很长一段时间,但我还没在博客园写过博客,这是在博客园的第一篇博客,希望能养成每周写博客的好习惯 O(∩∩)O~~) 今天要聊得是gulp的一个实时刷新的插件gulp-live ...

  3. java对象克隆以及深拷贝和浅拷贝

    1.什么是"克隆"? 在实际编程过程中,我们常常要遇到这种情况:有一个对象A,在某一时刻A中已经包含了一些有效值,此时可能 会需要一个和A完全相同新对象B,并且此后对B任何改动都不 ...

  4. Spring Data JPA,一种动态条件查询的写法

    我们在使用SpringData JPA框架时,进行条件查询,如果是固定条件的查询,我们可以使用符合框架规则的自定义方法以及@Query注解实现. 如果是查询条件是动态的,框架也提供了查询接口. Jpa ...

  5. Eclipse使用Maven创建Web项目+整合SSM框架

    一.准备环境: maven:apache-maven-3.2.3 jdk:jdk1.8.0_25 tomcat:tomcat-9.0 二.配置Maven.jdk 1.Window——>Prefe ...

  6. koa中间件系统原理及koa+orm2实践。

    koa是由 Express 原班人马打造的新的web框架.套用其官方的说法:Koa 应用是一个包含一系列中间件 generator 函数的对象. 这些中间件函数基于 request 请求以一个类似于栈 ...

  7. Swift3.0 函数闭包与OC Block

    刚接触Swift,如有不对的点,欢迎指正.转载请说明出处 定义一个基本函数 //定义一个函数,接收一个字符串,返回一个String类型的值 func test(name:String) -> S ...

  8. Ubuntu14.04下搜狗输入法的安装及配置

    在搜狗官网上下载相应的版本32/64 搜狗网址:http://pinyin.sogou.com/linux/?r=pinyin 在文件夹中找到下载的搜狗输入法文件(默认位置是Downloads),双击 ...

  9. Parallel.For 你可能忽视的一个非常实用的重载方法

    说起Parallel.For大家都不会陌生,很简单,不就是一个提供并行功能的for循环吗? 或许大家平时使用到的差不多就是其中最简单的那个重载方法,而真实情况 下Parallel.For里面有14个重 ...

  10. Java中反射与常用方法

    java通常是先有类再有对象,有对象我就可以调用方法或者属性. 反射其实是通过Class对象来调用类里面的方法.通过反射可以调用私有方法和私有属性.大部分框架都是运用反射原理.   如何获得Class ...