【CF 666B】World Tour
来源:互联网 发布:python tkiner 编辑:程序博客网 时间:2024/05/16 18:00
Description
Cicasso是一个著名的雕塑家。
现在他想去城市之间旅游,他是一个聪明的人,所以从一个城市到另一个城市他只会走最短路。他想游览全国的风景,所以他想走的路的总长度尽量长,但是经费有限,他只能去四个城市,而且这四个城市不能重复(在途中经过的城市不计算,例如 ,他要去的四个城市有上标,[1, 5, 2, 4],这样是合法的)
注意,道路是单向路,并且距离都为1。
Solution
又裸又水的题目。
预处理出两两点之间的最短路径。
然后找出每个点的最短路中到达最远的两个点,然后两两匹配就可以了。
Code
#include<iostream>#include<cstdio>#include<cstring>#include<cstdlib>#include<queue>#include<algorithm>#define rep(i,l,r) for(int i=l;i<=r;i++)#define per(i,r,l) for(int i=r;i>=l;i--)#define mmt(a,v) memset(a,v,sizeof(a))#define tra(i,u) for(int i=head[u];i;i=e[i].next)using namespace std;const int N=3000+5;const int M=5000+5;struct Edge{int to,next;};int head[N],cnt;Edge e[M];void ins(int u,int v){e[++cnt]=(Edge){v,head[u]};head[u]=cnt;}int d[N][N],n;void bfs(){ queue<int>qs,q; mmt(d,-1); rep(i,1,n){ d[i][i]=0; qs.push(i); q.push(i); } while(!q.empty()){ int s=qs.front(),u=q.front();qs.pop();q.pop(); tra(i,u){ int v=e[i].to; if(d[s][v]==-1){ d[s][v]=d[s][u]+1; qs.push(s);q.push(v); } } }}int p[2][N],pt[2][N];void build(){ rep(i,1,n){ p[0][i]=p[1][i]=pt[0][i]=pt[1][i]=i; rep(j,1,n){ if(d[i][j]>d[i][p[0][i]])p[1][i]=p[0][i],p[0][i]=j; else if(d[i][j]>d[i][p[1][i]])p[1][i]=j; if(d[j][i]>d[pt[0][i]][i])pt[1][i]=pt[0][i],pt[0][i]=j; else if(d[j][i]>d[pt[1][i]][i])pt[1][i]=j; } }}bool check(int a,int b,int c,int d){ return a!=b&&a!=c&&a!=d&&b!=c&&b!=d&&c!=d;}int main(){ //freopen("a.in","r",stdin); int m;scanf("%d%d",&n,&m); while(m--){ int u,v;scanf("%d%d",&u,&v); ins(u,v); } bfs();build(); int ans=-1,t1,t2,t3,t4; rep(i,1,n)rep(j,1,n) if(i!=j&&d[i][j]!=-1) rep(k1,0,1)rep(k2,0,1){ int a=pt[k1][i],b=p[k2][j]; if(check(a,i,j,b)&&d[a][i]+d[i][j]+d[j][b]>ans) ans=d[a][i]+d[i][j]+d[j][b],t1=a,t2=i,t3=j,t4=b; } printf("%d %d %d %d\n",t1,t2,t3,t4); return 0;}
1 0
- 【CF 666B】World Tour
- CodeForces 666B World Tour
- CodeForces 666B World Tour(spfa+枚举)
- CodeForces 666B. World Tour【BFS】
- Codeforces 666B World Tour 暴力最短路
- Codeforces #349 div1 B. World Tour 模拟 技巧
- Codeforces Round #349 (Div. 1) B. World Tour
- Codeforces Round #349 (Div. 1) B. World Tour (暴力搜索)
- cf 666B
- codeforces_667D. World Tour
- cf-B
- cf B
- BFS+枚举 Codeforces666B World Tour
- 【Codeforces666B】【World Tour】【最短路】
- CF World Football Cup
- 参加ios Tech Talk World Tour
- Hannah Montana: Spotlight World Tour PS2
- Codeforces 66D World tour BFS+枚举
- 关于汇编ARM指令DCD
- 作业
- algorithm 题集五 (16.07.20)
- navicat 破解方法及下载
- UVA-10970 Big Chocolate
- 【CF 666B】World Tour
- 冒泡排序的优化方法
- 有关 phpmyadmin登陆中遇到The requested URL /phpmyadmin was not found on this server的解决方法
- 杭电-1070-Milk (结构体+sort)
- tjut 5400
- 关于事件总线EventBus的使用
- USB WIFI 腾达811M无线网卡 -RT5370移植
- 多项式求和 hd 2011
- neural-networks-and-deep-learning mnist_average_darkness.py