城市 city

【问题描述】

众所周知,why 是czyz 王国的国王。

czyz 王国一共有n 个城市,每个城市都有一条道路连向一个城市(可能连向这个城市自己)。

同时,对于每一个城市,也只有一条道路连向它。

如果一个人可以通过道路可以从城市x 走向城市y,那么我们称(x,y) 这

个数对是满足条件的。(x 可以等于y)

现在why 可以选择2 个城市改变他们连向的道路,且改变完成之后也要满足上述的条件。

why 想知道,经过这个操作后,最多能有多少满足条件的数对。

【输入格式】

第一行包括一个整数n, 表示城市数。

第二行包括n 个整数a[i],表示i 有一条道路连向a[i]。

【输出格式】

输出一行一个整数,表示最多能得到多少满足条件的数对。

【输入输出样例】

Input1 Input2

3

2 1 3

5

1 5 4 3 2

Output1 Output2 
9 17

【样例解释】

对于样例1,不需要改变,每两个城市之间可以相互到达,ans=3*3=9。

对于样例2,change a[2] to 4, a[3] to 5。

【数据范围】

对于20% 的数据满足:n ≤ 10。

对于50% 的数据满足:n ≤ 100。

对于70% 的数据满足:n ≤ 1000。

对于100% 的数据满足:n ≤ 10^6, 1 ≤ a[i] ≤ n。

Solution

这道题真没想到会超时呢

#include<bits/stdc++.h>
using namespace std;
int n;
int a[];
bool flag[];
int xfindy(int x,int y,int depth){//返回走的步数
if(depth>n) return -;//边界
if(flag[]) flag[x]=;//标记服务
if(x==y&&depth!=) return depth;//成功条件
else return xfindy(a[x],y,depth+);//继续找
}
int count(int start){
return xfindy(start,start,);
}
int main(){
freopen("city.in","r",stdin);
freopen("city.out","w",stdout);
cin>>n;
for(int i=;i<=n;i++)
{
cin>>a[i]; }
//特判:完美的环
if(count(n-)==n) {cout<<n*n; return ;}
//把两个最大的环合并
// for(int i=1;i<=n;i++){
//如果a[i],a[j]在不同的环内,且
// for(int j=1;j<=n;j++)
// }
long long ans=,max1=-0x3f3f3f,max2=max1,city1=-,city2=-;
for(int i=;i<=n;i++)
{
int huani=count(i);
if(huani>max1) {
max1=huani;
city1=i;
}
}
for(int i=;i<=n;i++)
{
if(xfindy(i,city1,)!=-) continue;
int huani=count(i);
if(huani>max2) {
max2=huani;
city2=i;
}
}
memset(flag,,sizeof(flag));
flag[]=;
for(int i=;i<=n;i++){
//如果从i出发,找不到那两个最大环中的城市,ans+=count(i)^2
if(flag[i]) continue;
if(xfindy(i,city1,)==-&&xfindy(i,city2,)==-) ans+=pow(count(i),);
//如果找的到,说明i在两个最大环内,下一个循环再看
}
ans+=pow(max1+max2,);
cout<<ans;
return ;
}

把互相连着的城市分开一条边,而形成一个环

连通性问题?

如果形成了一个完整的环,那么ans=n^2

如果没有呢?

如果两步之内,不能够形成完美的环呢?

两步,可以把两个环合并!

优先把本身环大的city指向另一个有大环的city,而不是指向少数city围成的环

检测有没有指向自己的环

再检测环city小的环

嵊州D6T2 城市 city的更多相关文章

  1. 建设城市(city):组合数,容斥原理

    想模一大堆人呢.考场上AC的大仙. 估计没人想给这题好好写一个题解吧,因为它的确挺简单的... 但是它对我来说一点都不简单啊!!! 至少出题人用脚写题解的时候肯定认为这道题是送分题了 容斥,枚举至少有 ...

  2. NOIP模拟测试15「建造城市city(插板法)·轰炸·石头剪刀布」

    建造城市 题解 先思考一个简单问题 10个$toot$ 放进5间房屋,每个房屋至少有1个$toot$,方案数 思考:插板法,$10$个$toot$有$9$个缝隙,$5$间房屋转化为$4$个挡板,放在t ...

  3. XML:使用DOM技术解析xML文件中的城市,实现select级联选择

    中国的城市xml格式:cities.xml <?xml version="1.0" encoding="utf-8"?> <china> ...

  4. 微信小程序实现按首字母检索城市列表

    不说废话,上效果图 因为我有多处要用到,所以我这里是写成自定义组件的,你也可以直接改成在page页面编写: 布局左边一个scroll-view,显示城市列表,右边一个view显示字母列表,城市列表这边 ...

  5. Python-定时爬取指定城市天气(二)-邮件提醒

    目录 一.概述 二.模块重新划分 三.优化定时任务 四.发送邮件 五.源代码 一.概述 上一篇文章python-定时爬取指定城市天气(一)-发送给关心的微信好友中我们讲述了怎么定时爬取城市天气,并发送 ...

  6. YII+DWZ三级城市联动挂件

    挂件PHP文件 class CountryCityCombox extends RXWidget { public $provinceId = 2; public $cityId = 3687; pu ...

  7. IOS UIPickView+sqlite 选择中国全部城市案例

    1.案例简单介绍 通过读取文件.将中国全部城市写入sqlite数据库中,现通过UIPickView实现中国全部城市的选择,效果图例如以下所看到的 2.城市对象模型 中国全部城市数据请看http://b ...

  8. 省份-城市-区域三级联动【struts2 + ajax +非数据库版】

    package loaderman; /** * 实体,封装省份和城市 */ public class Bean { private String province;//省份 private Stri ...

  9. Vue 通过调用百度API获取地理位置-经度纬度省份城市

    一.首先在百度api注册获得ak密钥 二.新建js文件,我命名为loadBMap.js,里面创建script,代码如下: /** * 加载地图 * @param {Function} callback ...

随机推荐

  1. 2018天梯赛、蓝桥杯、(CCPC省赛、邀请赛、ICPC邀请赛)校内选拔赛反思总结!

    才四月份,上半年的比赛就告一段落了.. 天梯赛混子,三十个人分最低,把队友拖到了国三,蓝桥杯省二滚粗,止步京城,旅游选拔赛成功选为替补二队,啊! 不过既然已经过去,我们说些乐观的一面,积累了大赛经验是 ...

  2. jenkins SSH发布文件 Publish over SSH

    jenkins 构建完成后需要一键发布,结构如下 A服务器 svn B服务器 jenkins C服务器 应用服务器 B从A拉取代码后打包成war,然后向C服务器拷贝war包 这里解决的就是远程拷贝问题 ...

  3. bash通配符 shell正则表达式

    在linux中 通配符是系统命令使用,一般用来匹配文件名或者什么的用在系统命令中. 通配符是系统级别的,通配符多用在文件名上,比如查找find,ls,cp,rm 正则表达式是操作字符串,以行尾单位来匹 ...

  4. 【转载】IPSec-Tools配置

    来源:https://blog.csdn.net/zt698/article/details/4811604 1       介绍从Linux 2.6内核开始,内核就自身带有IPSec模块,配合IPS ...

  5. jQuery--dataTable 前端分页与后端分页 及遇到的问题

    (1)区别 前端分页:一次性把所有数据全都放在前端,由前端进行处理:适合请求的数据量不大的情况 后端分页:服务器模式,所有的分页,搜索,排序等操作在服务器端完成,然后前端去请求数据:适合量大的情况 ( ...

  6. 学会springboot多环境配置方案不用5分钟

    一 前言 本篇文章的主题是在springboot中写多个配置文件,指定让个配置文件生效,以便于达到在开发环境,测试环境,线上环境根据不同的配置灵活应用:读完本篇你将获得,学会springboot的多环 ...

  7. spark 报错 InvalidClassException: no valid constructor

    2019-03-19 02:50:24 WARN TaskSetManager:66 - Lost task 1.0 in stage 0.0 (TID 1, 1.2.3.4, executor 1) ...

  8. EF--EntityState相互转换

    EF对数据做什么样的操作,是根据EF的上下文实体状态决定,实体状态有以下5种状态,下面我们就分别看下这5种状态 数据准备,我们看到学生表里有20000名学生记录,最后1位学生的学生编号为0000020 ...

  9. Charles老版本教程

    链接:http://pan.baidu.com/s/1c16PxEo  刮开有奖->密码:dbml 初级篇: 1.1设置代理 1.2参数设置+界面介绍 1.3屏蔽多余数据 1.4请求重发 1.5 ...

  10. 【pattern】设计模式(3) - Observer观察者模式

    源码地址:https://github.com/vergilyn/design-patterns 另外一个大神很全的Github:https://github.com/iluwatar/java-de ...