题目大意

给出了一个图,然后让你加最多的边,让点\(1\)到\(2\)之间至少要经过5条边


解法

比较清楚,我们可以将这个图看作一个分层图,点\(1\)为第一层,再将\(2\)作为第五层,这样第一层和第五层直接加边就可以保证我们之间至少有\(5\)条边经过了。

那么剩下的点我们还是分成\(3\)层,其中第\(2\)层为与\(1\)直接相连的节点,第\(4\)层为直接和节点\(2\)相连的节点,剩下的节点我们就放在了第\(3\)层中,那么这样我们就做好了分层工作。

很明显最优的方案就是每一层的节点都两两相连,那么我们就先将所有的点都连起来,在减掉所有不可以的边。

什么边是不可以的呢?比如说是重复的边,或者是从点\(1\)连到到了\(2\)的边,这些边都是不可以的边。

那么我们每次只需要保证我们连接的边的两个端点是\(u,v\)是\(u<v\)就可以了。

若一个第三层的点连到某个第一层的点,则该点可以向第一层的所有点连边。若一个第三层的点连到某个第四层的点,则该点可以向所有第四层的点连边。否则的话就向节点数较多的那一层连边就好了。

ac代码(我丑陋的代码)

# include <cstdio>
# include <cstring>
# include <algorithm>
# include <ctype.h>
# include <iostream>
# include <cmath>
# include <map>
# include <vector>
# include <queue>
# define LL long long
# define ms(a,b) memset(a,b,sizeof(a))
# define ri (register int)
# define inf (0x7f7f7f7f)
# define pb push_back
# define fi first
# define se second
# define pii pair<int,int>
using namespace std;
inline int gi(){int w=0,x=0;char ch=0;while(!isdigit(ch)) w|=ch=='-',ch=getchar();while(isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48),ch=getchar();return w?-x:x;
}
# define N 1000005
struct edge{int to,nt;
}E[N<<1];
int cnt,n,m,s1,s2;//s1表示第2层的点数,s2表示第4层点的个数
int H[N],link[N];
void addedge(int u,int v){//加边不说E[++cnt]=(edge){v,H[u]}; H[u]=cnt;
}
int main(){n=gi(),m=gi();for (int i=1;i<=m;i++){int u=gi(),v=gi();addedge(u,v); addedge(v,u);}for (int e=H[1];e;e=E[e].nt) link[E[e].to]=1,s1++;//将所有与1相连的节点计算出来for (int e=H[2];e;e=E[e].nt) link[E[e].to]=2,s2++;//累计所有和2相连的节点int ans=0,s3=n-s1-s2-2,now1=s1,now2=s2;//now分别表示当前我们还有处理的与1和2相连的节点个数for (int i=3;i<=n;i++){if (link[i]==1){//如果当前节点和1相连now1--,ans+=now1;//表示当前这个节点和其他和for (int e=H[i];e;e=E[e].nt){int v=E[e].to;if (link[v]&&v>i) ans--;//减掉重复的边}}if (link[i]==2){now2--,ans+=now2;for (int e=H[i];e;e=E[e].nt){int v=E[e].to;if (link[v]&&v>i) ans--;//减掉重复的边}}if (!link[i]){s3--; ans+=s3;int fg=0,s=0;for (int e=H[i];e;e=E[e].nt){int v=E[e].to;if (link[v]) fg=link[v],s++;else if (v>i) ans--;}if (fg==1) ans+=s1-s;else if (fg==2) ans+=s2-s;else ans+=max(s1,s2);}}printf("%d\n",ans);return 0;
}

转载于:https://www.cnblogs.com/chhokmah/p/10465905.html

[luogu3505][bzoj2088][POI2010]TEL-Teleportation【分层图】相关推荐

  1. 三个指标怎么做分层图_分层性能指标以及在哪里找到它们

    三个指标怎么做分层图 Hierarchical machine learning models are one top-notch trick. As discussed in previous po ...

  2. 图论 ---- E. Minimum Path(分层图最短路 用分层图对边权操作进行选择)

    题目链接 题目大意: 两点间最短路的定义变成:所有的边之和−max+min所有的边之和-max+min所有的边之和−max+min 解题思路: 这里很明显就是变成了最短路的时时候就是把路径上边权最小值 ...

  3. CF990G GCD Counting(树上莫比乌斯反演,分层图,并查集)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Problem 给定一棵点带权无根树,对于每个 k∈[1,2×105]k\in[1,2\times10 ...

  4. [NOIP2009] 最优贸易 (最短路,分层图)

    题目链接 Solution 分层图+\(SPFA\). 建立3层图,其中每一层之中的边权赋为0. 对于任意一条边 \(t\) ,其起点 \(x\) 和终点 \(y\). 我们将 \(x\) 在第一层的 ...

  5. BZOJ2662[BeiJing wc2012]冻结——分层图最短路

    题目描述 "我要成为魔法少女!"      "那么,以灵魂为代价,你希望得到什么?"  "我要将有关魔法和奇迹的一切,封印于卡片之中„„"  ...

  6. 【线性规划与网络流24题】孤岛营救问题 分层图

    孤岛营救问题 Time Limit: 1 Sec  Memory Limit: 128 MB Description 1944年,特种兵麦克接到国防部的命令.要求马上赶赴太平洋上的一个孤岛,营救被敌军 ...

  7. 2018南京网络赛L题 Magical Girl Haze(分层图+优先队列优化的dijkstra)

    使用优先队列优化过的dijkstra时间复杂度可以达到O(v*logn),还是很快的. #include <iostream>                //最好是用long long ...

  8. CodeForces - 1486E Paired Payment(分层图最短路)

    题目链接:点击查看 题目大意:给出一个 nnn 个点 mmm 条边组成的带权无向图,规定每次只能走两条边,假设走的两条边为 a−>b−>ca->b->ca−>b−> ...

  9. 洛谷 - P4009 汽车加油行驶问题(分层图最短路/最小费用最大流)

    题目链接:点击查看 题目大意:给出一个n*n的矩阵表示道路,途中有一些加油站,现在要从点(1,1)到达点(n,n),问最小花费,其中的一些规则如下: 汽车只能沿着网格边行驶,装满油后可以行驶K条边,出 ...

  10. 洛谷 - P4568 [JLOI2011]飞行路线(分层图最短路)

    题目链接:点击查看 题目大意:给出一张图,每条边都有权值,现在要求从点st到达点ed,沿途中可以让k条边的边权免费,现在求最短路 题目分析:分层图经典模板问题,直接套板子就行了,最后记得对于数组d的每 ...

最新文章

  1. 【机器视觉案例】(9) AI视觉,手势控制电脑键盘,附python完整代码
  2. 使iPhone手机持续振动
  3. 脑电分析系列[MNE-Python-8]| 参考电极简介
  4. AD属性修改 office 365 delivery management 设定
  5. 栈和队列都是限制存取点的线性结构_栈的练习以及解析
  6. AngularJs学习笔记(四)
  7. 统一并发 II——基准测试方法
  8. 以前的(山寨机)手机是怎么逐渐消失的?
  9. Linux/CentOS/Ubuntu查看文件内容命令总结
  10. python 单反格式转格式_如何用单反斜杠转义字符串的特殊字符 - python
  11. 区间dp讲解之石子合并问题 区间dp的分析方法
  12. gambit多面整合
  13. 同义词转换不再有效_1秒变电脑,手机吃鸡新体验,北通E1键鼠转换器上手体验!...
  14. 怎样将int转换为byte
  15. ubuntu服务器系统安装教程,Ubuntu--服务器版本系统安装图解教程
  16. Elasticsearch入门登录篇
  17. 浅学 --------- CSS
  18. 基于混沌的一般彩色图像加密算法的Matlab实现
  19. xshell连接不上虚拟机Linux
  20. 初学者这样玩 TypeScript,迟早进大厂系列!

热门文章

  1. 解决IOS播放器KxMovie播放音频卡顿的问题
  2. 电影《阿凡达》观后感
  3. 【入门】QQ聊天机器人--HelloWorld篇
  4. WebStorm+Chrome插件JetBrains IDE Support进行实时调试
  5. Navicat Premium 15 注册出现 No All Pattern Found! File Already Patched?
  6. 高分子专业计算机建模,高分子与计算机模拟.doc
  7. USF MSDS501 计算数据科学中文讲义 2.7 如何阅读代码
  8. html 实现动态在线预览word、excel、pdf等文件(方便快捷)
  9. 淘宝/天猫买家信息 API
  10. php 如何添加备案号,wordpress如何添加备案信息