博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
嵊州D6T2 城市 city
阅读量:5110 次
发布时间:2019-06-13

本文共 1924 字,大约阅读时间需要 6 分钟。

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

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

连通性问题?

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

如果没有呢?

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

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

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

检测有没有指向自己的环

再检测环city小的环 

 

转载于:https://www.cnblogs.com/send-off-a-friend/p/11196191.html

你可能感兴趣的文章
通过反射来修改对象里面的值
查看>>
Gym - 100221D 一题一直没过的dfs,,应该是纯手动码?
查看>>
Codeforces Round #172 (Div. 2) D. Maximum Xor Secondary 单调栈应用
查看>>
...
查看>>
关于大根堆 (模板)
查看>>
堆排序
查看>>
java 垃圾回收总结(可达性分析 引用分类
查看>>
洛谷 P2024 [NOI2001]食物链 (并查集)
查看>>
CSS Sticky Footer实现
查看>>
python之路_socketserver模块
查看>>
一款我用了好多年的多线程FTP软件
查看>>
GreenDao数据库的简单使用
查看>>
Starting cloudera-scm-server: * Couldn't start cloudera-scm-server的解决办法(图文详解)
查看>>
Hadoop的ChainMapper和ChainReducer使用案例(链式处理)(四)
查看>>
linux 强制删除yum安装的php7.2
查看>>
uiautomator_python使用汇总
查看>>
tomcat cluster session同步时保存map数据遇到的问题
查看>>
Javascript备忘录-枚举一个对象的所有属
查看>>
Asp.net MVC DefaultModelBinder分析
查看>>
KVM安装
查看>>