城市 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. 初学maven的一些配置

    初学Maven的一些配置 1.maven的安装 2.从官网下载3.6.1版本后,高级版本可能会出现不兼容 jdk1.8 3.配置maven 在 settings.xml <settings> ...

  2. html标签学习入门 随笔

    Html学习入门    随笔1: HTML 标题 HTML 标题(Heading)是通过 <h1> - <h6> 等标签进行定义的. 标题仅用于标题文本  不应该被使用在加粗字 ...

  3. 《Head first设计模式》之观察者模式

    观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新. 客户有一个WeatherData对象,负责追踪温度.湿度和气压等数据.现在客户给我们提了个 ...

  4. k8s系列---网络插件flannel

    跨节点通讯,需要通过NAT,即需要做源地址转换. k8s网络通信: 1) 容器间通信:同一个pod内的多个容器间的通信,通过lo即可实现: 2) pod之间的通信,pod ip <---> ...

  5. NodeJS 介绍安装

    1.NodeJS简介 Node.js是基于Chrome JavaScript运行时建立的一个平台,实际上它是对Google Chrome V8引擎进行了封装,它主要用于创建快速的.可扩展的网络应用.N ...

  6. django后台处理前端上传和显示图片

      1:项目根目录存放图片的目录 2:settings.py  添加 MEDIA_ROOT = os.path.join(BASE_DIR, "media") 3:url.py 添 ...

  7. NIO学习笔记,从Linux IO演化模型到Netty—— 究竟如何理解同步、异步、阻塞、非阻塞

    我的观点 首先,分开各自理解. 1. 同步:描述两个(或者多个)个体之间的协调关系. 比如,单线程中,methodA调用了methodB,methodB返回后,methodA才往下执行,那么称A同步调 ...

  8. leetcode-简单-栈-逆波兰表达式

    根据逆波兰表示法,求表达式的值. 有效的运算符包括 +, -, *, / .每个运算对象可以是整数,也可以是另一个逆波兰表达式. 说明:  整数除法只保留整数部分. 给定逆波兰表达式总是有效的.换句话 ...

  9. Python——格式输出,基本数据

    一.问题点(有待解决) 1.Python中只有浮点数,20和20.0是否一样? from decimal import Decimal  a = Decimal('1.3') round() 参考文章 ...

  10. [MongoDB]评估使用mongodb的五个因素

    企业选择 NOSQL 或非表格结构数据库,评估时应从以下五个关键维度来考虑:• 数据模型的类型• 查询模型是否能满足灵活的查询需求• 事务模型类型,以及一致性属于强一致性还是最终一致性• APIs 的 ...