Teleportation(tel)
Teleportation(tel)
题目描述
Zy大帝拥有n个星球,因为距离非常遥远,所以Zy在他所居住的1号星球和他的军事基地霸中所在的2号星球建造了两个传送门,这样从1号星球到2号星球就只需要250分钟,回去也一样(双向)。由于科技的发展,各个星球陆陆续续建造了和自己居民最经常去的星球之间的传送门,并且他们的传送门只需要1个小时(真快啊!),他们发现和别的星球建设传送门对促进经济发展有很大的帮助,于是向和其他所有星球建设传送门发展,Zy突然发现两两星球的传送门的建设会威胁到他的安全,可是他又想促进自己帝国的发展,于是他请到了他精心培养的你,希望你能帮他解决这个难题。
输入
第1行为两个整数n(2<=n<=40000)和m(0<=m<=1000000),n表示星球数,m 表示其他星球已经建造的传送门的对数(传送门都是两两建造的)(不包括Zy在1号和2号的)。
接下来m行每行两个由空格隔开的整数想x,y(2<=x,y<=40000),表示这两个星球建造了传送门连接。
输出
还能让多少对传送门建造,但又不会比Zy从1号星球到2号星球快(就是说增加传送门后,从1号星球到2号星球还是Zy的传送门最快)。
样例输入
10 10
1 3
3 5
5 7
7 9
2 9
1 4
4 6
6 8
8 10
2 10
样例输出
10
提示

实线连接的是已经造好传送门的两星球,虚线连接表示可以增加建造的传送门两星球。可以看出,建造了10对以后,从1号到2号星球还是Zy的250分钟最快。
来源
solution
分层图。
当时考场傻了,没考虑周全。
设1为S,2为T
题目要求S~T的最短路长度<=5,同时最大化总边数。
设与S一步的点有a个,T一步的点有b个。
S两步的有x个,T有y个。
剩下点数fr。
显然a,b,x,y,fr内部可以随便连边。
a与x,b与y两两连边。
fr与x和y连,和a与b其中之一连。
ansl=a+1LL*a*(a-1)/2+1LL*a*x+1LL*x*(x-1)/2;
ansr=b+1LL*b*(b-1)/2+1LL*b*y+1LL*y*(y-1)/2;
ansmid=1LL*x*y+1LL*fr*(fr-1)/2+1LL*fr*(x+y)+1LL*fr*max(a,b);
ans=ansl+ansr+ansmid-m;
挣神表示怀疑fr的连边,讲些什么ab还是xy为空的特殊情况。
然而没有这种数据。
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
#define maxn 40005
using namespace std;
int n,m,a,b,x,y,S[maxn],T[maxn],X[maxn],Y[maxn];
long long ansl,ansr,ansmid,ans;
struct node{
    int u,v;
}e[1000005];
int main()
{
    cin>>n>>m;
    for(int i=1;i<=m;i++){
        scanf("%d%d",&e[i].u,&e[i].v);
        if(e[i].v<e[i].u)swap(e[i].u,e[i].v);
        if(e[i].u==1)S[e[i].v]=1,a++;
        if(e[i].u==2)T[e[i].v]=1,b++;
    }
    for(int i=1;i<=m;i++){
        if(e[i].u==1||e[i].u==2)continue;
        if(S[e[i].u]==1&&S[e[i].v]==1)continue;
        if(T[e[i].u]==1&&T[e[i].v]==1)continue;
        if(S[e[i].u]==1&&!X[e[i].v])X[e[i].v]=1,x++;
        if(S[e[i].v]==1&&!X[e[i].u])X[e[i].u]=1,x++;
        if(T[e[i].u]==1&&!Y[e[i].v])Y[e[i].v]=1,y++;
        if(T[e[i].v]==1&&!Y[e[i].u])Y[e[i].u]=1,y++;
    }
    int fr=n-a-b-x-y-2;
    ansl=a+1LL*a*(a-1)/2+1LL*a*x+1LL*x*(x-1)/2;
    ansr=b+1LL*b*(b-1)/2+1LL*b*y+1LL*y*(y-1)/2;
    ansmid=1LL*x*y+1LL*fr*(fr-1)/2+1LL*fr*(x+y)+1LL*fr*max(a,b);
    ans=ansl+ansr+ansmid-m;
    cout<<ans<<endl;
    return 0;
}
 												
											Teleportation(tel)的更多相关文章
- 拨打电话tel: 跳转到邮件mailto:(html)
		
拨打电话 <a href="tel://0571866000">0571-866000</a> 跳转到邮件 <a href="mailto: ...
 - 国内固定电话正则验证:'tel': [/0\d{2,3}-\d{7,8}(|([-\u8f6c]{1}\d{1,5}))$/, "请填写有效的电话号码"],
		
// 验证字段 $('#info_form').validator({ rules : { checkMobile : function(ele) { return checkMobile(ele); ...
 - Android网页中tel,sms,mailTo,Intent,Market协议用法总结
		
tel:协议---拨打电话 <a href="tel:">调出拨号界面</a> <a href="tel:10086">调 ...
 - 安卓版微信内置浏览器,<a href="tel:电话号码"></a> 这个链接失效,不能跳到拨号界面?
		
https://segmentfault.com/q/1010000000318831 在URL最后面加“ #mp.weixin.qq.com ”,应该加其他qq.com的二级域名都行,估计是微信的安 ...
 - input type="tel" 数字输入框显示圆点
		
最近开发中遇到一个这样的需求,要求input输入框在手机端出现数字键盘的同时显示圆点,试过各种方法都不太理想, 最终经过查阅大量资料后,终于实现了需求. ●我们一般的密码输入框是这样的: <in ...
 - 解决微信浏览器中无法一键拨号问题tel
		
公众号中需要在某些页面显示手机号码,并且需要点击后拨号. 原以为 <a href="tel:10086">10086</a> 可以解决了, 没想到在微信浏览 ...
 - 开启windows的 admin+开启tel+电源+远程功能
		
1.控制面板 小图标 程序功能 打开关闭windows功能 开启Telnet 的服务两个都选 2. 启动tel服务 控制面板 小图标 管理工具 服务 找到 t ...
 - HTML5 & tel & make a phone call
		
HTML5 & tel & make a phone call 咋呼叫呀,网页怎么打电话? { key: "exploreCorpPhone", title: &q ...
 - input type="tel" 输入框显示密文
		
为了在移动端实现密码输入框且调起的键盘为数字键盘,可以用-webkit-text-security:disc;text-security:disc;属性来实现. 语法: text-security: ...
 
随机推荐
- Ubuntu下安装pip3和Python的第三方库
			
一.Ubuntu原有环境说明 无论是在服务器上面还是在我们自己的电脑上面,当我们成功安装了Ubuntu系统之后,系统一般情况下会自带Python2.x和Python3.x环境.比如我在自己的阿里云服务 ...
 - RabbitMQ使用教程(五)如何保证队列里的消息99.99%被消费?
			
1. 前情回顾 RabbitMQ使用教程(一)RabbitMQ环境安装配置及Hello World示例 RabbitMQ使用教程(二)RabbitMQ用户管理,角色管理及权限设置 RabbitMQ使用 ...
 - IPython安装过程 @win7 64bit
			
http://www.360doc.com/content/14/0902/11/16740871_406476389.shtml 为了测验测验一下IPython的应用,今天折腾了好久的从安装包msi ...
 - 03_14_final关键字
			
03_14_final关键字 1. Final关键字 final的变量的值不能够被改变 final的成员变量 final的局部变量(形参) final的方法不能够被重写 final的类不能够被继承
 - swl字符串
			
创建字符串方法 去掉时间戳 #define NSLog(FORMAT, ...) printf("%s\n", [[NSString stringWithFormat:FORMAT ...
 - STL MAP使用注意事项
			
Hat’s Words A hat’s word is a word in the dictionary that is the concatenation of exactly two other ...
 - (76)zabbix_agentd.conf配置文件详解
			
############ GENERAL PARAMETERS ################# ### Option: PidFile# Name of PID file.# Agent PID文 ...
 - 怎样查看web软件例如apache的连接数
			
查看连接总数和当前的连接数 netstat -ant | grep $ip:80 | wc -l netstat -ant | grep $ip:80 | grep EST | wc -l 查看IP访 ...
 - 19.VUE学习之- v-for与computed结合功能 筛选实例讲解
			
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
 - GoF23种设计模式之创建型模式之建造者模式
			
一.概述 将一个复杂对象的构建与其表示分离开来,使得同样的构建过程可以创建不同的表示. 二.适用性 1.当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式的时候. 2.当构造过程必须允许 ...