codeforce 884C - Bertown Subway DFS+图论
分析
题意说输入数据有两个规则:
1 每个i只有一个pi表示i站的目的地 i可以等于pi
2 每个pi都指向唯一的一个站i
那么也就是说i指向的目的只有一个且唯一 每个目的由唯一的始发站出来 所以也就是说 图中的每一个点只有一条单向边 那么当我们求最大的数量的可达对时 也就是尽可能构造大圈 所以每一个点 要么形成自回路 要么在一个多点圈中 而连接任意两个圈的花费就是修改两站的目的地 所以 把两个圈构造成一个大圈的花费就是2
所以这道题可以任选两个最大的圈 连成一个 那么最多的点对 就是这个圈中的点数的平方
题意归纳出来就是尽可能构造大的圈,注意数据有可能会超int
code
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 100010;
struct node{int id,val;node(int a,int b):id(a),val(b){}
};
bool cmp(node a,node b){return a.val>b.val;
}
vector<node>ans;
int k,nex[maxn];
bool bok[maxn];
void dfs(int s){if(!bok[s]){bok[s]=1;k++;dfs(nex[s]);}
}
int main()
{int n;scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d",&nex[i]);}for(int i=1;i<=n;i++){if(!bok[i]){k=0;dfs(i);ans.push_back(node(i,k));}}sort(ans.begin(),ans.end(),cmp);ll sum=0,add=0;bool f=0;if(ans.size()>=2){for(int i=0;i<ans.size();i++){if(i<2){add+=ans[i].val; }else {sum+=1LL*ans[i].val*ans[i].val;//防止溢出}} sum+=1LL*add*add;//防止溢出}else{sum = 1LL*n*n;}printf("%lld\n",sum);return 0;
}
WA在爆int…
codeforce 884C - Bertown Subway DFS+图论相关推荐
- codeforce Pashmak and Buses(dfs枚举)
1 /* 2 题意:n个同学,k个车, 取旅游d天! 3 要求所有的学生没有两个或者两个以上的在同一辆车上共同带d天! 输出可行的方案! 4 5 对于d行n列的矩阵,第i行第j列表示的是第i天第j个同 ...
- N - Wires(dfs 图论 离散化)
题目链接:https://codeforces.com/contest/1250/problem/N 题意:给定一个图,点从1到1e9,边有2e5,修改一些边,使得最后所有边都在同一集合 题解:由于点 ...
- 【题解】CodeForce 1060E-Sergey and Subway(树形DP)
题意:给你n个顶点的一棵树,距离为3的两个点之间连一条新的边(原边留下),问所有点对的距离之和. 题解:考虑两个问题, 第一,如果两个点之间的距离是偶数的话,那么连新边之后的距离就变成了原来就距离/2 ...
- Codeforces 题目合集+分类+代码 【Updating...】【361 in total】
961A - Tetris 模拟 ...
- 图论入门六:哥尼斯堡七桥问题
转载自https://blog.csdn.net/saltriver/article/details/54585595 哥尼斯堡七桥问题: 1736年,年仅29岁的数学家欧拉来到普鲁士的古城哥尼斯堡( ...
- 图论入门一:图的基本概念
前言: 图(graph)并不是指图形图像(image)或地图(map).通常来说,我们会把图视为一种由"顶点"组成的抽象网络,网络中的各顶点可以通过"边"实现彼 ...
- 图论算法(5):图的广度优先遍历 BFS
本章节内容使用 java 实现,Github 代码仓:https://github.com/ZhekaiLi/Code/tree/main/Graph/src 查看文章内的图片可能需要科学上网! 因为 ...
- F 魏迟燕的自走棋(思维+贪心+并查集维护联通块/左部点配对边<=2的匈牙利)
https://ac.nowcoder.com/acm/contest/9984/F 参考:F 魏迟燕的自走棋(贪心+并查集) 将每个人看成一个点,武器的能力值抽象成边,这样就转化成图论的模型了. 然 ...
- 微软过桥问题Dijkstra/倒水问题
微软过桥问题 微软的过桥问题:4个人在晚上过一座小桥,过桥时必须要用到手电筒,只有一枚手电筒,每次最多只可以有两人通过, 4个人的过桥速度分别为1分钟.2分钟.5分钟.10分钟,试问最少需要多长时间4 ...
最新文章
- 开发日记-20190425 关键词 gradle基础学习 7年之约 启动篇
- .NET仓储模式高级用例
- 主动触发被动模式从而挟持无线客户端 – Passive Karma Attack
- php中对象怎么访问i属性_PHP--序列化与反序列化详解
- 科大星云诗社动态20201122
- centos7.4安装图形界面及报错处理
- python程序详细描述_如何逐行描述Python代码?
- 天猫浏览型应用的CDN静态化架构演变(转)
- 服务器如何返回429状态,Instagram远程服务器返回一个错误:(429)UNKNOWN STATUS CODE...
- c# 整数类型转byte_C#中数据类型的整数类型
- LeetCode 624. 数组列表中的最大距离
- python3.8.2中文手册chm_3.2.2中文语法考察
- 实现跨域访问---同源策略 、常见跨域方法
- android 悬浮组件,Android 悬浮组件
- cad 万能字体_CAD:“你的图纸缺少shx字体!”不知道该怎么办?不存在的!
- Linux下创建、删除软链接
- Linux编译Opencv3.4.7: relocation R_X86_64_PC32 against `ff_w_ff‘ can not be used when makin with -fPIC
- 摄像头图像质量常用指标的测试方法
- 由随机数生成器到宿命论
- NOIWC2018滚粗记