计蒜客 17417 Highest Tower(思维+图论)
题解:
实际上一个可行解即选取长和宽的一个,使得最后每一组选第一维的数值都不同
在此基础上,使得另一维的和最大。
然后建立图论模型
对于每一个方块,在a和b之间连边。
对于选择的方案,如果选择a->b,那么就是以a为底,b为高
所以最后的图一定要满足所有点的出度为1(出度为2就有重复了)
基于这个我们发现只有两种情况。
1、图中含有环,实际上所有边的方向都是固定的,答案就是每个点的入度*每个点的值加起来。
2、图中不含环(树的结构),那么实际上可以选取一个点为根,根的答案可以额外计算。所以就选取树中值最大的那个点为根即可。
#include <iostream>
#include <cstring>
#include <cstdio>
#include <vector>
#include <map>
using namespace std;
const int maxn = 5e5 + ;
vector<int> G[maxn];
map<int, int> M;
long long m, N, Max, ans;
int vis[maxn], v[maxn];
void dfs(int x){
if(vis[x]) return;
vis[x] = ;
m += G[x].size(); N++; Max = max(Max, (long long)v[x]);
ans += (G[x].size()-)*v[x];
for(auto to : G[x]) dfs(to);
}
int n, x, y, tot;
int main()
{
scanf("%d", &n);
for(int i = ; i <= n; i++){
scanf("%d %d", &x, &y);
if(!M[x]){
M[x] = ++tot;
v[tot] = x;
}
if(!M[y]){
M[y] = ++tot;
v[tot] = y;
}
G[M[x]].push_back(M[y]);
G[M[y]].push_back(M[x]);
}
memset(vis, , sizeof(vis));
for(int i = ; i <= tot; i++){
if(!vis[i]) {
N = ;
m = ;
Max = ;
dfs(i);
if(m/ == N-) ans += Max;
}
}
cout<<ans<<endl;
return ;
}
计蒜客 17417 Highest Tower(思维+图论)的更多相关文章
- 计蒜客 作弊揭发者(string的应用)
鉴于我市拥堵的交通状况,市政交管部门经过听证决定在道路两侧安置自动停车收费系统.当车辆驶入车位,系统会通过配有的摄像头拍摄车辆画面,通过识别车牌上的数字.字母序列识别车牌,通过连接车管所车辆信息数据库 ...
- 计蒜客的一道题dfs
这是我无聊时在计蒜客发现的一道题. 题意: 蒜头君有一天闲来无事和小萌一起玩游戏,游戏的内容是这样的:他们不知道从哪里找到了N根不同长度的木棍, 看谁能猜出这些木棍一共能拼出多少个不同的不等边三角形. ...
- 计蒜客模拟赛5 D2T1 成绩统计
又到了一年一度的新生入学季了,清华和北大的计算机系同学都参加了同一场开学考试(因为两校兄弟情谊深厚嘛,来一场联考还是很正常的). 不幸的是,正当老师要统计大家的成绩时,世界上的所有计算机全部瘫痪了. ...
- 计蒜客 等边三角形 dfs
题目: https://www.jisuanke.com/course/2291/182238 思路: 1.dfs(int a,int b,int c,int index)//a,b,c三条边的边长, ...
- 计蒜客 方程的解数 dfs
题目: https://www.jisuanke.com/course/2291/182237 思路: 来自:https://blog.csdn.net/qq_29980371/article/det ...
- 计蒜客 买书 dfs
题目: https://www.jisuanke.com/course/2291/182236 思路: 递归解决,从第一本书开始,每本书都有两种选择: //index是book里面每本书价格的下标, ...
- 计蒜客:Entertainment Box
Ada, Bertrand and Charles often argue over which TV shows to watch, and to avoid some of their fight ...
- 爬虫acm比赛成绩(多页成绩整合在一起、获取复制不了的数据)(hihocoder、计蒜客)
https://github.com/congmingyige/web-crawler_rank-of-competition-in-JiSuanKe-and-hihocoder 1. 计蒜客(获取复 ...
- 计蒜客 31436 - 提高水平 - [状压DP]
题目链接:https://nanti.jisuanke.com/t/31436 作为一名车手,为了提高自身的姿势水平,平时的练习是必不可少的.小 J 每天的训练包含 $N$ 个训练项目,他会按照某个顺 ...
随机推荐
- <简明>Markdown指南
什么是Markdown?Markdown是一种轻量级的「标记语言」,通常为程序员群体所用,目前它已是全球最大的技术分享网站 GitHub 和技术问答网站 StackOverFlow 的御用书写格式. ...
- LeetCode: 54. Spiral Matrix(Medium)
1. 原题链接 https://leetcode.com/problems/spiral-matrix/description/ 2. 题目要求 给定一个二维整型数组,返回其螺旋顺序列表,例如: 最后 ...
- android学习十二 配置变化
1.配置变化会终止当前活动,并重建活动 2.配置变化有 2.1 屏幕方向变化 2.2 语言变化 2.3 插到基座等 3. 配置变化应用程序不会清除,上下文对新活动依然有效 ...
- EF Core注意事项
流程:https://docs.microsoft.com/en-us/ef/core/get-started/aspnetcore/new-db 1.Both Entity Framework 6. ...
- linux常用的命令之一chmod
用权限 : 所有使用者 使用方式 : chmod [-cfvR] [--help] [--version] mode file... u 表示该档案的拥有者,g 表示与该档案的拥有者属于同一个群体(g ...
- MySQL☞数值处理函数
1.round():四舍五入函数 round(数值,参数):如果参数的值为正数,表示保留几位小数,如果参数的值为0,则只保留正数部分们如果参数的值为负数,表示对小数点前第几位进行四舍五入. Eg:(1 ...
- Visual Studio Code 工具使用教程
软件下载这里就不用讲了,安装完之后: 1.切换中文: 选择扩展 搜索“Language”,在下列选项选择 Chinese (Simplified) Language Pack for Visual S ...
- Linux命令应用大词典-第22章 GRUB
22.1 grub-md5-crypt:使用MD5格式加密口令 22.2 grub-install:在设备上安装GRUB 22.3 grub:进入GRUB命令shell 22.4 grub-crypt ...
- 博客更换至 www.zhaoch.top
博客更换至 www.zhaoch.top 随手拷了一些链接 http://www.zhaoch.top/操作系统/linux/常用命令备忘.html http://www.zhaoch.top/操作系 ...
- 接口文档神器--apiui的使用
接口开发,最麻烦的就是写文档了,曾经我也因为写接口文档苦不堪言:自从使用了apiui接口文档神器,工作效率和文档清晰得到了不止一个档次的提升. 下面介绍一下这个神器的使用: 把文件下载下来,放在网站根 ...