CF 949C Data Center Maintenance_强联通分量_思维题
题意:
某土豪公司建立了n个数据中心,把m份资料每份在其中的两个数据中心备份。 每个数据中心在一天h个小时当中有一个小时需要维护,此时不提供资料下载服务。 现在土豪公司想要将其中若干个数据中心的维护时间向后推迟一小时,并要求一天中任意时刻每份资料都可以被下载,问最少选取多少个数据中心维护。
题解:
首先,对于两个备份的地方,我们发现只有 (C[a]+1)(C[a]+1)(C[a]+1) % h==C[b]h==C[b]h==C[b] 时,a,ba,ba,b 两个处理器需要同时后延一小时。于是,建图的条件就是只要 (C[a]+1)(C[a]+1)(C[a]+1) % h==C[b])h==C[b])h==C[b]) 就在 (a,b)(a,b)(a,b) 之间连一条边,跑一遍 tarjantarjantarjan 求出出度为 000 的大小最小的团即可。
Code:
#include<cstdio>
#include<algorithm>
#include<stack>
#include<vector>
using namespace std;
const int maxn = 1000000 + 5;
int n,m, h, C[maxn];
int head[maxn], to[maxn << 1], nex[maxn << 1], cnt, degree[maxn];
int dfn[maxn], low[maxn], scc, siz[maxn], idx, vis[maxn], answer[maxn], ans;
stack<int>S;
inline void get_min(int &a, int b){ if(a > b) a = b;}
struct Graph{
inline void add_edge(int u,int v){
nex[++cnt] = head[u];
head[u] = cnt;
to[cnt] = v;
}
void tarjan(int u){
low[u] = dfn[u] = ++scc;
S.push(u);
vis[u] = 1;
for(int v = head[u]; v ; v = nex[v])
{
if(!vis[to[v]])
{
tarjan(to[v]);
low[u] = min(low[u], low[to[v]]);
}
else if(!answer[to[v]]) get_min(low[u], dfn[to[v]]);
}
if(dfn[u] == low[u])
{
++idx;
for(;;)
{
int x = S.top(); S.pop();
answer[x] = idx;
++siz[idx];
if(u == x) break;
}
}
}
inline void solve(){
siz[0] = maxn;
for(int i = 1;i <= n; ++i) if(!vis[i]) tarjan(i);
for(int i = 1;i <= n; ++i)
{
for(int j = head[i]; j ; j = nex[j])
{
if(answer[to[j]] != answer[i]) ++degree[answer[i]];
}
}
for(int i = 1;i <= idx; ++i){
if(degree[i]) continue;
if(siz[ans] > siz[i]) ans = i;
}
printf("%d\n", siz[ans]);
for(int i = 1;i <= n; ++i)
{
if(answer[i] == ans) printf("%d ",i);
}
printf("\n");
}
}T;
int main()
{
scanf("%d%d%d",&n,&m,&h);
for(int i = 1;i <= n; ++i) scanf("%d",&C[i]);
while(m--){
int a,b;
scanf("%d%d",&a,&b);
if(((C[a] + 1) % h) == C[b]) T.add_edge(a, b);
if(((C[b] + 1) % h) == C[a]) T.add_edge(b, a);
}
T.solve();
return 0;
}
CF 949C Data Center Maintenance_强联通分量_思维题的更多相关文章
- HDU 1269 迷宫城堡 【强联通分量(模版题)】
知识讲解: 在代码里我们是围绕 low 和 dfn 来进行DFS,所以我们务必明白 low 和 dfn 是干什么的? 有什么用,这样才能掌握他. 1. dfn[] 遍历到这个点的时间 2. ...
- CF 949C Data Center Maintenance——思路+SCC
题目:http://codeforces.com/contest/949/problem/C 可以想到可能是每组c有连边的可能. 但别直接给c1.c2连边,那样之后会变得很不好做. 可以把一些限制放在 ...
- [CF #236 (Div. 2) E] Strictly Positive Matrix(强联通分量)
题目:http://codeforces.com/contest/402/problem/E 题意:给你一个矩阵a,判断是否存在k,使得a^k这个矩阵全部元素都大于0 分析:把矩阵当作01矩阵,超过1 ...
- Kosaraju算法---强联通分量
1.基础知识 所需结构:原图.反向图(若在原图中存在vi到vj有向边,在反向图中就变为vj到vi的有向边).标记数组(标记是否遍历过).一个栈(或记录顶点离开时间的数组). 算法描叙: :对 ...
- UVa 11324 & 强联通分量+DP
题意: 一张无向图,求点集使其中任意两点可到达. SOL: 强联通分量中的点要么不选要么全都选,然后缩点DAG+DP 记录一下思路,不想写了...代码满天飞.
- BZOJ 1051 & 强联通分量
题意: 怎么说呢...这种题目有点概括不来....还是到原题面上看好了... SOL: 求出强联通分量然后根据分量重构图,如果只有一个点没有出边那么就输出这个点中点的数目. 对就是这样. 哦还有论边双 ...
- 洛谷 P2661 信息传递 Label:并查集||强联通分量
题目描述 有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学. 游戏开始时,每人都只知道自己的生日.之后每一 ...
- POJ 2186-Popular Cows (图论-强联通分量Korasaju算法)
题目链接:http://poj.org/problem?id=2186 题目大意:有n头牛和m对关系, 每一对关系有两个数(a, b)代表a牛认为b牛是“受欢迎”的,且这种关系具有传递性, 如果a牛认 ...
- POJ 1904 King's Quest 强联通分量+输入输出外挂
题意:国王有n个儿子,现在这n个儿子要在n个女孩里选择自己喜欢的,有的儿子可能喜欢多个,最后国王的向导给出他一个匹配.匹配有n个数,代表某个儿子和哪个女孩可以结婚.已知这些条件,要你找出每个儿子可以和 ...
随机推荐
- 《Python数据分析与挖掘实战》-第四章-数据预处理
点我看原版
- SQL Server UPDATE语句的用法详解
SQL Server UPDATE语句用于更新数据,下面就为您详细介绍SQL Server UPDATE语句语法方面的知识,希望可以让您对SQL Server UPDATE语句有更多的了解. 现实应用 ...
- openblas下载安装与使用
openblas下载 官方地址 zip文件 tar文件 openblas安装 直接执行 git clone https://github.com/xianyi/OpenBLAS.git cd Open ...
- 【UOJ#50】【UR #3】链式反应(分治FFT,动态规划)
[UOJ#50][UR #3]链式反应(分治FFT,动态规划) 题面 UOJ 题解 首先把题目意思捋一捋,大概就是有\(n\)个节点的一棵树,父亲的编号大于儿子. 满足一个点的儿子有\(2+c\)个, ...
- python中字符串逆序的实现
没有直接的逆序函数,有两种常用方式可将字符串逆序,一为切片,一为利用list的reverse,示例如下: #切片x=' y=x[::-1] #reverse函数 y=list(x) y.reverse ...
- PHP学习总结(9)——PHP入门篇之WAMPServer服务控制面板介绍
及MySQL数据库的整合软件包.免去了开发人员将时间花费在繁琐的配置环境过程,从而腾出更多精力去做开发.在windows下将Apache+PHP+Mysql 集成环境,拥有简单的图形和菜单安装和配置环 ...
- (1)spring boot起步之Hello World【从零开始学Spring Boot】
Spring Boot交流平台 1.1 介绍 自从structs2出现上次的漏洞以后,对spring的关注度开始越来越浓. 以前spring开发需要配置一大堆的xml,后台spring加入了annot ...
- 在centOS6.5 上安装使用pipework
需求:镜像生成了2个含有tomcat的容器,用nginx进行负载均衡.但是容器重启后ip会自动改变...所以使用pipework进行分配静态ip pipework安装 OS:centos6.5 第一步 ...
- MVC发送邮件
<> 发送邮件报错说明 发送邮件 假设发送人的邮箱username与邮箱password都没有填写错误:假设报:參数或变量中有语法错误. server响应为:mail from addre ...
- JDBC整理
JDBC提供了独立于数据库的统一Api,用以执行SQL命令.JDBC API由以下常用的接口和类组成: DriverManagement:用于管理JDBC驱动的服务类,程序中使用该类的主要功能是获取C ...