嵊州D6T2 城市 city
城市 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的更多相关文章
- 建设城市(city):组合数,容斥原理
想模一大堆人呢.考场上AC的大仙. 估计没人想给这题好好写一个题解吧,因为它的确挺简单的... 但是它对我来说一点都不简单啊!!! 至少出题人用脚写题解的时候肯定认为这道题是送分题了 容斥,枚举至少有 ...
- NOIP模拟测试15「建造城市city(插板法)·轰炸·石头剪刀布」
建造城市 题解 先思考一个简单问题 10个$toot$ 放进5间房屋,每个房屋至少有1个$toot$,方案数 思考:插板法,$10$个$toot$有$9$个缝隙,$5$间房屋转化为$4$个挡板,放在t ...
- XML:使用DOM技术解析xML文件中的城市,实现select级联选择
中国的城市xml格式:cities.xml <?xml version="1.0" encoding="utf-8"?> <china> ...
- 微信小程序实现按首字母检索城市列表
不说废话,上效果图 因为我有多处要用到,所以我这里是写成自定义组件的,你也可以直接改成在page页面编写: 布局左边一个scroll-view,显示城市列表,右边一个view显示字母列表,城市列表这边 ...
- Python-定时爬取指定城市天气(二)-邮件提醒
目录 一.概述 二.模块重新划分 三.优化定时任务 四.发送邮件 五.源代码 一.概述 上一篇文章python-定时爬取指定城市天气(一)-发送给关心的微信好友中我们讲述了怎么定时爬取城市天气,并发送 ...
- YII+DWZ三级城市联动挂件
挂件PHP文件 class CountryCityCombox extends RXWidget { public $provinceId = 2; public $cityId = 3687; pu ...
- IOS UIPickView+sqlite 选择中国全部城市案例
1.案例简单介绍 通过读取文件.将中国全部城市写入sqlite数据库中,现通过UIPickView实现中国全部城市的选择,效果图例如以下所看到的 2.城市对象模型 中国全部城市数据请看http://b ...
- 省份-城市-区域三级联动【struts2 + ajax +非数据库版】
package loaderman; /** * 实体,封装省份和城市 */ public class Bean { private String province;//省份 private Stri ...
- Vue 通过调用百度API获取地理位置-经度纬度省份城市
一.首先在百度api注册获得ak密钥 二.新建js文件,我命名为loadBMap.js,里面创建script,代码如下: /** * 加载地图 * @param {Function} callback ...
随机推荐
- sqlserver install on linux chapter two
The previous chapter is tell us how to install sqlerver on linuix Today, we will see how to make it ...
- 使用 pyenv 管理不同的 Python 版本
1. pyenv 的安装 $ yum install git -y $ yum install gcc make patch gdbm-devel openssl-devel sqlite-devel ...
- Windows 远程桌面连接Ubuntu14.04
在Ubuntu系统进行如下系统配置 1.安装xrdp sudo apt-get install xrdp 2.安装vnc4server sudo apt-get install vnc4server ...
- React中使用 PropTypes 进行类型检查
官方文档学习链接:https://zh-hans.reactjs.org/docs/typechecking-with-proptypes.html import React, { Component ...
- Arm开发板+Qt学习之路-qt线程执行完毕发送signal主动释放线程内存
header: #ifndef SENDCANMSGTHREAD_H#define SENDCANMSGTHREAD_H #include <QThread>#include " ...
- Linux运维---1.磁盘相关知识
一 磁盘物理结构 (1) 盘片:硬盘的盘体由多个盘片叠在一起构成. 在硬盘出厂时,由硬盘生产商完成了低级格式化(物理格式化),作用是将空白的盘片(Platter)划分为一个个同圆心.不同半径的磁道(T ...
- 你没有见过的【高恪】船新版本(SX3000 NAT1 X86魔改)
最近魔改了高恪SX3000 X86,做了如下更改: 开启了SSH 集成了插件(酸酸乳.V2RXY.SMB等等) 开启了NAT1 DIY了主题 精简了官方内置的无用应用和模块 截图(建议右击图片,在新标 ...
- C#中StreamWriter类使用总结
C#中StreamWriter类使用总结 1.使用的命名空间是:System.IO; 2.用来将字符串写入文件. 常用属性: AutoFlush:获取或设置一个值,该值指示是否 System.IO ...
- RMAN中MAXSETSIZE和MAXPIECESIZE的用法
MAXSETSIZE跟MAXPIECESIZE用法 区别:maxpiecesize设置的是备份完成后的备份片大小,对备份整体的大小没有影响,比如一个G的备份完成文件,maxpiecesize设置为10 ...
- 如何使用Acrok Video Converter Ultimate转换视频?
Acrok Video Converter Ultimate是一个功能强大的程序,可以帮助您转换几乎任何类型的视频格式,例如MKV,AVI,WMV,MP4,MOV,MTS,MXF,DVD,蓝光等. 下 ...