CF1307D Cow and Fields

整张无向图的边权为1。

首先求出 1,n1,n1,n 两个点的单源最短路径。这 kkk 个特殊点中,我们令第 aaa 个特殊点到 111 的距离为 xax_axa​,到 nnn 的距离为yay_aya​。设答案是连接 a,ba,ba,b 两点。

我们的目的就是最大化min(xa+yb+1,ya+xb+1)min(x_{a} + y_{b} + 1,y_{a} + x_{b} +1)min(xa​+yb​+1,ya​+xb​+1)
为了不失一般性,我们设
xa+yb≤ya+xb。x_{a} +y_{b}≤y_{a}+ x_{b}。xa​+yb​≤ya​+xb​。
我们可以化简成(分离变量,因为我们必须是同一个 aaa 才能排序)
xa−ya≤xb−ybx_{a}-y_{a}≤x_{b}-y_{b}xa​−ya​≤xb​−yb​
我们按照xa−yax_{a}-y_{a}xa​−ya​来排序,这样排完序之后的 aaa 和 bbb就 拥有了一个性质:a<ba<ba<b( aaa 一定在 bbb 的前面)
因此我们倒序处理Max[i]数组,表示的是 iii 右边(包括自己)最大的 yiy_iyi​。

然后我们正序求当前结点 aaa 的 xa+yb+1x_a + y_b + 1xa​+yb​+1(只能和右边 bbb 的匹配) 的最大值即可。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<map>
#include<queue>
using namespace std;
typedef long long ll;
typedef pair<int,int> PII;const int N = 510007, M = 510007, INF = 0x3f3f3f3f;
int t;
int n,m,k;
int dist[N];
bool vis[N];
int ver[M],nex[M],edge[M],head[N],tot;
int cnt;
int a[N],b[N];
int maxx,minn;
map<int,int>mp;int Max[N];
int dis1[N],disn[N];void add(int x,int y,int z){ver[tot] = y;nex[tot] = head[x];edge[tot] = z;head[x] = tot ++ ;
}struct node{int dis1,disn;bool operator<(const node &t)const{return dis1 - disn < t.dis1 - t.disn;}
}pos[N];priority_queue<PII,vector<PII>,greater<PII> >q;void Dijkstra(int S){memset(dist,0x3f,sizeof dist);memset(vis,0,sizeof vis);dist[S] = 0;q.push({dist[S],S});while(q.size()){int x = q.top().second;q.pop();if(vis[x])continue;vis[x] = true;for(int i = head[x];~i;i = nex[i]){int y = ver[i],z = edge[i];if(dist[y] > dist[x] + z){dist[y] = dist[x] + z;q.push({dist[y],y});}}}
}int main(){memset(head,-1,sizeof head);scanf("%d%d%d",&n,&m,&k);for(int i = 1;i <= k;++i)scanf("%d",&a[i]);for(int i = 1;i <= m;++i){int x,y;scanf("%d%d",&x,&y);add(x,y,1);add(y,x,1);}Dijkstra(1);for(int i = 1;i <= n;++i)dis1[i] = dist[i];Dijkstra(n);for(int i = 1;i <= n;++i)disn[i] = dist[i];for(int i = 1;i <= k;++i)pos[i] = {dis1[a[i]],disn[a[i]]};sort(pos + 1,pos + 1 + k);int ans = 0;for(int i = k;i;--i)Max[i] = max(Max[i + 1],pos[i].disn);for(int i = 1;i < k;++i)ans = max(ans,pos[i].dis1 + Max[i + 1] + 1);ans = min(ans,dis1[n]);printf("%d\n",ans);return 0;
}

解题报告:CF1307D Cow and Fields(最短路、最优解不等式化简)相关推荐

  1. CodeForces - 1307D Cow and Fields(最短路+思维)

    题目链接:点击查看 题目大意:给出一个由 n 个点和 m 条边组成的无向图,其中有 k 个点被标记了,题目要求选出两个被标记的点,连接一条边,使得从点 1 到点 n 的最短路最大 题目分析:读完题后, ...

  2. Codeforces Roun d #621 (Div. 1 + Div. 2) D. Cow and Fields 最短路+贪心 图上特殊点加边使最短路最大

    题目链接:https://codeforces.ml/contest/1307/problem/D 题目大意: 有一个无向图n个点m条边,其中有k个特殊点.现在让你在两个特殊点之间连一条边.让1到n的 ...

  3. D. Cow and Fields(最短路+思维)

    Problem - 1307D - Codeforces 题意:给你n个点m条双向边的图,每条边边权为1,你必须从k个点中选两个点连接,使得连接后, 找到1到n的最短路径的最大可能长度. 题解: 如果 ...

  4. 解题报告 (九) 二分图最大匹配

    文章目录 二分图最大匹配 解题报告 一.最大匹配模板题 HDU 1083 Courses HDU 2063 过山车 HDU 1528 Card Game Cheater HDU 1179 Olliva ...

  5. 解题报告:【kuangbin带你飞】专题九 连通图

    目录 A.POJ 1236 Network of Schools(有向图缩点) B.UVA 315 Network(找割点) C.UVA 796 Critical Links(桥) D.POJ 369 ...

  6. 10.30 NFLS-NOIP模拟赛 解题报告

    总结:今天去了NOIP模拟赛,其实是几道USACO的经典的题目,第一题和最后一题都有思路,第二题是我一开始写了个spfa,写了一半中途发现应该是矩阵乘法,然后没做完,然后就没有然后了!第二题的暴力都没 ...

  7. POJ 1797 Heavy Transportation 解题报告

    分类:图论,生成树,最短路,并查集 作者:ACShiryu 时间:2011-7-28 地址:ACShiryu's Blog Heavy Transportation Time Limit: 3000M ...

  8. 学大伟业Day1解题报告

    学大伟业Day1解题报告 张炳琪 一.   时间分配 T1:30分钟  T2: 60分钟  T3:100分钟 二.答题情况及错因 T1:100         T2:55             T3 ...

  9. 2019组队赛第二场(ACM International Collegiate Programming Contest, Arabella Collegiate 解题报告 Apare_xzc

    2019组队赛第二场(ACM International Collegiate Programming Contest, Arabella Collegiate 解题报告 by xzc,zx,lj 先 ...

最新文章

  1. 最先进的计算机视觉|AI和工业4.0之间,还有多远的差距?
  2. 2013年全球最佳工作
  3. 学python可以干嘛-学 Python 都用来干嘛的?
  4. getservbyname和getservbyport
  5. 栈的应用就进匹配_笔记
  6. sqlserver 2005 数据库的差异备份与还原
  7. Mac端解决(含修改8.0.13版的密码):Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)...
  8. JAVA编写提示用户输入投资额_java(计算银行存款总额(要求输入错误时,提示重新输入))...
  9. printstream_Java PrintStream close()方法与示例
  10. 绝大部分博士目前都无法进入大学
  11. 论文阅读-可变形卷积v2: More Deformable, Better Results
  12. 星环大数据助银行数据仓库全面升级
  13. Siamese系列跟踪网络之SiamFC、SiamRPN、DaSiamRPN、SiamRPN++、SiamMask
  14. php显示某年某月某日,输入某年某月某日,判断这一天是这一年的第几天?
  15. 反映百度引擎权重的身分都有哪些
  16. 福建将乐窑文物首次系统对外展示 133件完整器亮相京城
  17. PCB板设计布局原则有哪些?
  18. Latex表示随机变量相互独立,不独立
  19. 怎么实现从抖音内跳转到微信关注页面?
  20. 吴孟达版《高等工程数学》第四章+matlab实践

热门文章

  1. 基于YOLOv3和PyTorch 的视频-图像模型
  2. 链表问题6——环形单链表的约瑟夫问题(初阶)
  3. Eclipse 最常用的 10 组快捷键,个个牛逼!
  4. (转)基于MVC4+EasyUI的Web开发框架形成之旅--界面控件的使用
  5. 程序员老司机“随意开车”,恶搞代码让你分分钟玩死程序员!
  6. tar -cvPf new.tar `rpm -ql vsftpd` 建议不要用绝对路径'/'
  7. RESTful API 设计最佳实践
  8. 搭建高可用mongodb集群(二)—— 副本集
  9. YSlow使用指南_最新2.0使用指南中文版
  10. 去Tech Ed得计划好