垃圾csdn,累感不爱!


题目链接:

http://codeforces.com/contest/667/problem/D

题意:

在有向图中找到四个点,使得这些点之间的最短距离之和最大。

分析:

最简单的Bellman求最短路复杂度太高。可以对每个点进行一次bfs,获得所有连通的点之间的最短距离。

点数最多3000,枚举中间两个点\(i,j\),对于点\(i\)考虑反向边的最远距离,对于点\(j\)考虑正向边的最远距离。

由于题目说点不同,所以对于每个点我们保存前三个远的点并枚举求得最远距离即可。这样枚举下来时间复杂度\(O(n^2)\)。

代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<vector>
#include<queue>
#include<algorithm>
using namespace std;
const int maxn = 3e3 + 5, oo = 0x3f3f3f3f;
int d[maxn][maxn];
int n, m;
typedef pair<int, int>p;
vector<p>zz[maxn], rzz[maxn];
vector<int>G[maxn];
void bfs()
{
for(int i = 1; i <= n; i++){
queue<int>q;
q.push(i);
while(!q.empty()){
int u = q.front(); q.pop();
for(int j = 0; j <G[u].size(); j++){
int w = G[u][j];
if(d[i][w] != oo) continue;
d[i][w] = d[i][u] + 1;
q.push(w);
}
}
}
}
int main (void)
{
scanf("%d%d", &n, &m);
memset(d, 0x3f, sizeof(d));
for(int i = 1; i <= n; i++) d[i][i] = 0;
int u, v;
for(int i = 0; i < m; i++){
scanf("%d%d", &u, &v);
G[u].push_back(v);
}
bfs();
for(int i = 1; i <= n; i++){
for(int j = 1; j <= n; j++){
if(i == j) continue;
if(d[i][j] != oo) zz[i].push_back(p(d[i][j], j));
if(d[j][i] != oo) rzz[i].push_back(p(d[j][i], j));
}
sort(zz[i].begin(), zz[i].end());
sort(rzz[i].begin(), rzz[i].end());
}
int r1, r2, r3, r4;
int maxx = 0;
int res;
for(int i = 1; i <= n; i++){
int a = zz[i].size();
for(int j = 1; j <= n; j++){
int b = rzz[j].size();
if(i == j || d[j][i] == oo) continue;
for(int k= a - 1; k >= a - 3 && k >= 0; k--){
if(zz[i][k].second == j) continue;
for(int y = b - 1; y >= b - 3 && y >= 0; y--){
if(zz[i][k].second == rzz[j][y].second) continue;
if(rzz[j][y].second == i) continue;
res = d[j][i] + rzz[j][y].first + zz[i][k].first;
if(res > maxx){
maxx = res;
r1 = rzz[j][y].second, r2 = j, r3 = i, r4 = zz[i][k].second;
}
}
}
}
}
//cout<<maxx<<endl;
printf("%d %d %d %d\n", r1, r2, r3, r4);
}

Codeforces 667D World Tour【最短路+枚举】的更多相关文章

  1. Codeforces 667D World Tour 最短路

    链接 Codeforces 667D World Tour 题意 给你一个有向稀疏图,3000个点,5000条边. 问选出4个点A,B,C,D 使得 A-B, B-C, C-D 的最短路之和最大. 思 ...

  2. hdu 1595 find the longest of the shortest【最短路枚举删边求删除每条边后的最短路,并从这些最短路中找出最长的那条】

    find the longest of the shortest Time Limit: 1000/5000 MS (Java/Others)    Memory Limit: 32768/32768 ...

  3. POJ 1161 Walls(最短路+枚举)

    POJ 1161 Walls(最短路+枚举) 题目背景 题目大意:题意是说有 n个小镇,他们两两之间可能存在一些墙(不是每两个都有),把整个二维平面分成多个区域,当然这些区域都是一些封闭的多边形(除了 ...

  4. CJOI 05新年好 (最短路+枚举)

    CJOI 05新年好 (最短路+枚举) 重庆城里有n个车站,m条双向公路连接其中的某些车站.每两个车站最多用一条公路连接,从任何一个车站出发都可以经过一条或者多条公路到达其他车站,但不同的路径需要花费 ...

  5. 2018-2019 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2018)- D. Delivery Delays -二分+最短路+枚举

    2018-2019 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2018)- D. Delivery Delays -二分+最短路+枚举 ...

  6. Codeforces Round #349 (Div. 1) B. World Tour 最短路+暴力枚举

    题目链接: http://www.codeforces.com/contest/666/problem/B 题意: 给你n个城市,m条单向边,求通过最短路径访问四个不同的点能获得的最大距离,答案输出一 ...

  7. codeforces 667D D. World Tour(最短路)

    题目链接: D. World Tour time limit per test 5 seconds memory limit per test 512 megabytes input standard ...

  8. World Tour CodeForces - 667D (bfs最短路)

    大意: 有向图, 求找4个不同的点ABCD, 使得d(A,B)+d(D,C)+d(C,A)最大

  9. Codeforces Round #349 (Div. 2) D. World Tour (最短路)

    题目链接:http://codeforces.com/contest/667/problem/D 给你一个有向图,dis[i][j]表示i到j的最短路,让你求dis[u][i] + dis[i][j] ...

随机推荐

  1. Caused by: java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/dispatcher-servlet.xml]

    这是因为我把 [/WEB-INF/dispatcher-servlet.xml]的位置换成了[config/springmvc/dispatcher-servlet.xml] 因此idea在原来的位置 ...

  2. ant design table td 文字显示过长添加省略号、ant 文字过长时添加tootip提示

    方法1: overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit ...

  3. python之数据类型补充

    1. capitalize (首字母大写) 例题: s = "alex wusir" s1 = s.capitalize() # 格式 print(s1) ''' 输出结果 Ale ...

  4. ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061) : 第一次设置MySQL也适用

    [MySQL的安装环境]:windows7 64位 [MySQL的版本]:mysql-8.0.16-winx64 [错误描述]: ERROR 2003 (HY000): Can't connect t ...

  5. 6.python

    最早的'密码本' ascii 涵盖了英文字母大小写,特殊字符,数字.01010101ascii 只能表示256种可能,太少,创办了万国码 unicode 16表示一个字符不行,32位表示一个字符. A ...

  6. java面试宝典第三弹

    Http和Https的区别 超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之 ...

  7. 【贪心】bzoj1045: [HAOI2008] 糖果传递

    很妙的贪心思考过程 Description 有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1. Input 第一行一个正整数nn<=1'000'0 ...

  8. 【dp 状态压缩 单调栈】bzoj3591: 最长上升子序列

    奇妙的单调栈状压dp Description 给出1~n的一个排列的一个最长上升子序列,求原排列可能的种类数. Input 第一行一个整数n. 第二行一个整数k,表示最长上升子序列的长度. 第三行k个 ...

  9. (34)zabbix Queue队列

    概述 queue(队列)显示监控项等待刷新的时间,可以看到每种agent类型刷新时间,通过queue可以更好的体现出监控的一个指标.正常情况下,是一片绿色. 如果出现过多红色,那么需要留意一下.我们也 ...

  10. python--类的约束, 异常处理, MD5, 日志处理

    一 . 类的约束 1. 写一个父类,父类中的某个方法要抛出一个异常 NotImplementedError class Base: # 对子类进行了约束. 必须重写该方法 # 以后上班了. 拿到公司代 ...