CF666B. World Tour
CF666B. World Tour
题意:
给定一张边权为 1 的有向图,求四个不同点 A, B, C, D
使得 dis(A, B) + dis(B, C) + dis(C, D) 取最大值,dis表示最短路距离 1 ≤ n ≤ 3000, 1 ≤ m ≤ 5000
我又写了假做法呜呜呜
首先当然\(O(nm)\)预处理两点之间最短路
然后预处理出从每个点开始前3个dis最大的点
假做法:
贪心,枚举A,贪心选择dis较大的BCD,就是3*3*3搜索选出B、C、D
假的原因:
贪心不成立,因为前面会影响后面,可以先差,再优、优
真做法:
再预处理到达每个点的前3个dis最大的点
枚举B、C,再3*3选出A、D,选A、D不会像之前那样互相干扰了
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int N = 1e4+5, inf = 1e9;int n, m;
struct edge {int v, ne;} e[N];
int cnt, h[N], d[N][N];
inline void ins(int u, int v) {e[++cnt] = (edge) {v, h[u]}; h[u] = cnt;
}int q[N], head, tail, vis[N];
#define fir first
#define sec second
pair<int, int> a[N], f[N][5], g[N][5];
void bfs(int s) {memset(vis, 0, sizeof(vis));head = tail = 1;q[tail++] = s; vis[s] = 1;memset(d[s], 0x3f, sizeof(d[s]));int *dis = d[s];dis[s] = 0;while(head != tail) {int u = q[head++];for(int i=h[u]; i; i=e[i].ne) {int v = e[i].v;if(vis[v]) continue;dis[v] = dis[u] + 1;vis[v] = 1;q[tail++] = v;}}
}
void solve(int s) {int cnt = 0;for(int i=1; i<=n; i++) if(i!=s && d[s][i] < inf) a[++cnt] = make_pair(d[s][i], i);for(int i=cnt+1; i<=3; i++) a[i] = make_pair(0, 0);sort(a+1, a+cnt+1, greater<pair<int, int> >());f[s][1] = a[1], f[s][2] = a[2], f[s][3] = a[3];cnt = 0;for(int i=1; i<=n; i++) if(i!=s && d[i][s] < inf) a[++cnt] = make_pair(d[i][s], i);for(int i=cnt+1; i<=3; i++) a[i] = make_pair(0, 0);sort(a+1, a+cnt+1, greater<pair<int, int> >());g[s][1] = a[1], g[s][2] = a[2], g[s][3] = a[3];//if(s == 1) printf("hi %d %d %d\n", a[1].sec, a[2].sec, a[3].sec);//printf("sssssssssssssssssssssssssssss %d\n", s);//for(int i=1; i<=3; i++) printf("f %d %d %d\n", i, f[s][i].fir, f[s][i].sec);
}int ans, li[10];
int main() {//freopen("in", "r", stdin);ios::sync_with_stdio(false); cin.tie(); cout.tie();cin >> n >> m;for(int i=1; i<=m; i++) {int u, v;cin >> u >> v;if(u != v && !d[u][v]) ins(u, v), d[u][v] = 1;}for(int i=1; i<=n; i++) bfs(i);for(int i=1; i<=n; i++) solve(i);for(int b=1; b<=n; b++)for(int c=1; c<=n; c++) if(d[b][c] < inf && c != b) {int now = d[b][c];for(int i=1; i<=3; i++) {pair<int, int> &ra = g[b][i];int a = ra.sec;if(a == b || a == c || !ra.fir) continue;now += ra.fir;for(int j=1; j<=3; j++) {pair<int, int> &rd = f[c][j];int d = rd.sec;if(d ==a || d == b || d == c || !rd.fir) continue;now += rd.fir; if(now > ans) {ans = now;li[1] = a; li[2] = b; li[3] = c; li[4] = d;}now -= rd.fir;}now -= ra.fir;}}for(int i=1; i<=4; i++) cout << li[i] << ' ';
}
CF666B. World Tour相关推荐
- usaco Canada Tour
没想到用dp,写完才发现这就是floyd求最大环..... /* ID:jinbo wu TASK:tour LANG:C++ */ #include<bits/stdc++.h> usi ...
- Codeforces 894.D Ralph And His Tour in Binary Country
D. Ralph And His Tour in Binary Country time limit per test 2.5 seconds memory limit per test 512 me ...
- poj 2677 tour
2019独角兽企业重金招聘Python工程师标准>>> /*G:Tour查看提交统计提问总时间限制: 1000ms内存限制: 65536kB 描述 John Doe, a skill ...
- Bzoj3060 [Poi2012]Tour de Byteotia
3060: [Poi2012]Tour de Byteotia Time Limit: 30 Sec Memory Limit: 256 MB Submit: 251 Solved: 161 De ...
- HDOJ 1224 Free DIY Tour
简单DP Free DIY Tour Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- knight tour java_The Knight’s tour problem
Backtracking | Set 1 (The Knight's tour problem骑士周游算法 ) Backtracking is an algorithmic paradigm that ...
- POJ 1637 Sightseeing tour(最大流)
POJ 1637 Sightseeing tour 题目链接 题意:给一些有向边一些无向边,问能否把无向边定向之后确定一个欧拉回路 思路:这题的模型很的巧妙,转一个http://blog.csdn.n ...
- 最大流增广路(KM算法) HDOJ 1853 Cyclic Tour
题目传送门 1 /* 2 KM: 相比HDOJ_1533,多了重边的处理,还有完美匹配的判定方法 3 */ 4 #include <cstdio> 5 #include <cmath ...
- 骑士周游算法 c语言_C语言经典算法04--骑士走棋盘(骑士旅游:Knight tour)
说明:骑士旅游(Knight tour)在十八世纪初倍受数学家与拼图迷的注意,它什么时候被提出已不可考,骑士的走法为西洋棋的走法,骑士可以由任一个位置出发,它要如何走完[所有的位置? 解法:骑士的走法 ...
最新文章
- Android 替换TextView 里面指定的符号
- 数据集轻松按需搜索,这个工具汇集近2000个图像数据集,可免费获取|Reddit高热...
- 【ES6】对象、函数、数组的扩展
- UE4 iOS设备的兼容性
- Java编程中“为了性能”尽量要做到的一些地方 [转]
- CPU的IPC调优:通过优化代码,提高每个时钟的指令数
- Faster R-CNN源码中ROI Pooling的解析
- 用 Markdown 写作(一)——添加文章页内导航
- 让我们旋转跳跃不停歇~~~当3D打印遇上八音盒!(一)
- 好程序员分享面向对象概念的理解以及ES3和ES6中类的写法
- HDU 5602 Black Jack (记忆化搜索+DP)*
- 平台如何实现实人认证?
- 亚马逊测评:最前沿养号系统,如何降低成本提高效率搭建稳定的ip环境
- 【LOJ2867】「IOI2018」高速公路收费
- 产品30讲之产品周期
- python输入年月日判断什么星座_输入月份和日期给出对应星座
- 雷军-我十年的程序员生涯
- mysql md5 多少位_mysql的MD5加密后的字符能不能设定长度
- 名帖145 行书《兰亭八柱帖》第三册:冯承素摹兰亭序
- 使用while语句与do...while语句计算多个整数的和
热门文章
- 怎么让sql查询的字段可以不出现在group分组里_在工作中常用到的SQL
- 魔众Markdown管理系统v2.1.0源码
- laravel 如何 new php 类,PHP实例:laravel通过创建自定义artisan make命令来新建类文件详解...
- 伯乐发卡系统源码 可用
- 百度网盘直接解析高速下载文件源码
- 织梦cms高端红酒酒业类网站模板
- 搜集侠采集织梦系统模板
- Spring Boot开发框架优点诠释
- MooTools教程(3):数组管理DOM元素
- javascript基本数据类型与值类型引用类型说明