Codeforces 667D World Tour 最短路
链接
题意
给你一个有向稀疏图,3000个点,5000条边。 问选出4个点A,B,C,D 使得 A-B, B-C, C-D 的最短路之和最大。
思路
枚举中间两个点,端点就是不与这三个点重复的最大的那个点来更新答案。因为是稀疏图,可以做n遍spfa来维护两两之间的最短路。
代码
#include <iostream>
#include <cstdio>
#include <vector>
#include <stack>
#include <queue>
#include <algorithm>
#include <map>
#include <set>
#include <cmath>
#include <cstring>
#include <string>
#define LL long long
#define INF 0x3f3f3f3f
#define eps 1e-8
#define MAXN 3005
#define MAXM 5005
using namespace std;
struct Edge{
int to, next;
}edges[MAXM];
int head[MAXN];
int tot;
bool vis[MAXN];
int d[MAXN][MAXN];
int res[5];
vector<pair<int, int> > dis1[MAXN], dis2[MAXN];
void add_edge(int x, int y){
edges[tot].to = y;
edges[tot].next = head[x];
head[x] = tot++;
}
void spfa(int s){
queue<int> Q;
memset(vis, 0, sizeof(vis));
Q.push(s);
d[s][s] = 0;
while (!Q.empty()){
int x = Q.front(); Q.pop();
for (int i = head[x]; i != -1; i = edges[i].next){
int y = edges[i].to;
if (d[s][x] + 1 < d[s][y]){
d[s][y] = d[s][x] + 1;
}
if (vis[y]) continue;
vis[y] = true;
Q.push(y);
}
}
}
int main(){
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
//freopen("out.txt", "w", stdout);
#endif // ONLINE_JUDGE
int n, m;
scanf("%d%d", &n, &m);
memset(head, -1, sizeof(head));
tot = 0;
int x, y;
for (int i = 1; i <= m; ++i){
scanf("%d%d", &x, &y);
add_edge(x, y);
}
memset(d, INF, sizeof(d));
for (int i = 1; i <= n; ++i){
spfa(i);
}
for (int i = 1; i <= n; ++i){
for (int j = 1; j <= n; ++j){
if (d[i][j] != INF){
dis1[i].push_back(make_pair(d[i][j], j));
dis2[j].push_back(make_pair(d[i][j], i));
}
}
}
for (int i = 1; i <= n; ++i){
sort(dis1[i].rbegin(), dis1[i].rend());
sort(dis2[i].rbegin(), dis2[i].rend());
}
int ans = 0;
memset(res, 0, sizeof(res));
for (int i = 1; i <= n; ++i){
for (int j = 1; j <= n; ++j){
if (i == j) continue;
if (d[i][j] == INF) continue;
for (int k = 0; k < min(3, (int)dis2[i].size()); ++k){
if (i == dis2[i][k].second || j == dis2[i][k].second) continue;
for (int l = 0; l < min(3, (int)dis1[j].size()); ++l){
if (j != dis1[j][l].second && i != dis1[j][l].second && dis2[i][k].second != dis1[j][l].second){
int temp = d[i][j] + dis2[i][k].first + dis1[j][l].first;
if (temp > ans){
ans = temp;
res[0] = dis2[i][k].second, res[1] = i, res[2] = j, res[3] = dis1[j][l].second;
}
}
}
}
}
}
//printf("%d\n", ans);
for (int i = 0; i < 4; ++i){
printf("%d ", res[i]);
}
printf("\n");
}
Codeforces 667D World Tour 最短路的更多相关文章
- Codeforces 667D World Tour【最短路+枚举】
垃圾csdn,累感不爱! 题目链接: http://codeforces.com/contest/667/problem/D 题意: 在有向图中找到四个点,使得这些点之间的最短距离之和最大. 分析: ...
- codeforces 667D D. World Tour(最短路)
题目链接: D. World Tour time limit per test 5 seconds memory limit per test 512 megabytes input standard ...
- World Tour CodeForces - 667D (bfs最短路)
大意: 有向图, 求找4个不同的点ABCD, 使得d(A,B)+d(D,C)+d(C,A)最大
- 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] ...
- Codeforces Round #349 (Div. 1) B. World Tour 最短路+暴力枚举
题目链接: http://www.codeforces.com/contest/666/problem/B 题意: 给你n个城市,m条单向边,求通过最短路径访问四个不同的点能获得的最大距离,答案输出一 ...
- CodeForces 666B World Tour(spfa+枚举)
B. World Tour time limit per test 5 seconds memory limit per test 512 megabytes input standard input ...
- Codeforces 543B Destroying Roads(最短路)
题意: 给定一个n个点(n<=3000)所有边长为1的图,求最多可以删掉多少条边后,图满足s1到t1的距离小于l1,s2到t2的距离小于l2. Solution: 首先可以分两种情况讨论: 1: ...
- Codeforces 490F. Treeland Tour 暴力+LIS
枚举根+dfs 它可以活 , 我不知道有什么解决的办法是积极的 ...... F. Treeland Tour time limit per test 5 seconds memory limit p ...
- Codeforces 490F Treeland Tour 树形dp
Treeland Tour 离散化之后, 每个节点维护上升链和下降链, 感觉复杂度有点高, 为啥跑这么快.. #include<bits/stdc++.h> #define LL long ...
随机推荐
- 在C#中运行PowerShell
C#中运行PowerShell需要用到System.Management.Automation.dll.在Visual Studio中可以通过NuGet添加引用,package名字为"Sys ...
- Java 系列之Filter(一)
一.过滤器 过滤器就是在源数据和目的数据之间起过滤作用的中间组件.它可以截取客户端和资源之间的请求和响应信息,并且对这些信息进行过滤. 二.应用场景 1.对用户请求进行统一认证 2.对用户的访问请求进 ...
- dragView 屏幕拖拽并且弹出菜单的控件
dragView 因项目新需求需要添加一个屏幕拖拽按钮可以弹出菜单的控件,因为不是我做的闲来无事写一个demo吧 可能存在一些小bug(毕竟就写了几个小时)兄弟姐妹们理解思路就行 具体的可以自己调试一 ...
- 《鸟哥的Linux私房菜》笔记——04. 简单命令行
键入命令 [dmtsai@study ~]$ command [-options] parameter1 parameter2 ... 指令 選項 參數(1) 參數(2) 注意:有时也可以使用 + 放 ...
- Caffe Batch Normalization推导
Caffe BatchNormalization 推导 总所周知,BatchNormalization通过对数据分布进行归一化处理,从而使得网络的训练能够快速并简单,在一定程度上还能防止网络的过拟合, ...
- web产品浏览器兼容性问题你有考虑到吗?
通常,动态网页除了Server端的代码撰写Client端代码也必须下不少工夫.例如:表单提交前的数据验证.图片的轮播.菜单的收合等等. 因此,对于Client端是否能正常执行指令码也必须适当的考察,然 ...
- ZBrush软件特性之Color调控板
ZBrush®中的Color调色板显示当前颜色并提供数值的方法选择颜色,而且选择辅助色,使用描绘工具可以产生混合的色彩效果. ZBrush 4R8下载:http://wm.makeding.com/i ...
- failed to push some refs to 'git@github.com:RocsSun/mytest.git
Git推送到GitHub仓库失败 使用Git将文件推送至GitHub的远程仓库时,报错failed to push some refs to 'git@github.com:RocsSun/mytes ...
- NOIP2013 华容道 (棋盘建图+spfa最短路)
#include <cstdio> #include <algorithm> #include <cstring> #include <queue> # ...
- nysql数据库优化
硬件优化 软件优化 my.cnf参数优化,命令监控show global status\G 调优工具mysqlreport sql语句优化 索引的优化 白名单机制--百度,就是让一些不规范的语句执行查 ...