Codeforces Round #469 (Div. 1) 949C C. Data Center Maintenance (Div. 2 950E)
题
OvO http://codeforces.com/contest/949/problem/C
codeforces 949C 950E
解
建图,记原图为 G1,缩点,记缩完点后的新图为G2
缩完点后的图 G2 必定无环,求这个无环图 G2 中每个点的入度,
找出入度为 的那些点,记这些点的集合为 S,然后把 S 中这些点映射到 G1 中,则这些点各自对应一个点集。S 的各点中,对应的最小集合即为所求集合
#include <iostream>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <cstdio>
#include <queue>
#include <vector>
#include <stack> using namespace std; const int N=100044;
const int INF=1e9+44; struct data
{
int to,next;
} tu[N*2]; struct sav
{
int a,b;
} edgsav[N*2]; int head[N];
int ip;
int dfn[N], low[N];///dfn[]表示深搜的步数,low[u]表示u或u的子树能够追溯到的最早的栈中节点的次序号
int sccno[N];///缩点数组,表示某个点对应的缩点值
int step;
int scc_cnt;///强连通分量个数
int n,m,h,u[N];
int ind[N],outd[N];
int edgnum; void init()
{
ip=0;
edgnum=0;
memset(head,-1,sizeof(head));
memset(ind,0,sizeof(ind));
memset(outd,0,sizeof(outd));
} void add(int u,int v)
{
edgnum++,edgsav[edgnum].a=u,edgsav[edgnum].b=v;
tu[ip].to=v,tu[ip].next=head[u],head[u]=ip++;
} vector<int> scc[N];///得出来的缩点,scc[i]里面存i这个缩点具体缩了哪些点
stack<int> S; void dfs(int u)
{
dfn[u] = low[u] = ++step;
S.push(u);
for (int i = head[u]; i !=-1; i=tu[i].next)
{
int v = tu[i].to;
if (!dfn[v])
{
dfs(v);
low[u] = min(low[u], low[v]);
}
else if (!sccno[v])
low[u] = min(low[u], dfn[v]);
}
if (low[u] == dfn[u])
{
scc_cnt += 1;
scc[scc_cnt].clear();
while(1)
{
int x = S.top();
S.pop();
if (sccno[x] != scc_cnt) scc[scc_cnt].push_back(x);
sccno[x] = scc_cnt;
if (x == u) break;
}
}
} void tarjan(int n)
{
memset(sccno, 0, sizeof(sccno));
memset(dfn, 0, sizeof(dfn));
step = scc_cnt = 0;
for (int i = 1; i <=n; i++)
if (!dfn[i]) dfs(i);
} inline int trans(int x)
{
return (x+1)%h;
} int main()
{
int a,b;
init();
scanf("%d%d%d",&n,&m,&h);
for(int i=1;i<=n;i++)
scanf("%d",&u[i]);
for(int i=1;i<=m;i++)
{
scanf("%d%d",&a,&b);
if(trans(u[a])==u[b]) add(a,b);
if(trans(u[b])==u[a]) add(b,a);
}
tarjan(n);
for(int i=1;i<=edgnum;i++)
if(sccno[edgsav[i].a]!=sccno[edgsav[i].b])
{
outd[sccno[edgsav[i].a]]++;
ind[sccno[edgsav[i].b]]++;
}
int the,tmp=INF;
for(int i=1;i<=scc_cnt;i++)
if(outd[i]==0 && scc[i].size()<tmp)
the=i,tmp=scc[i].size();
printf("%d\n",tmp);
for(int i=0;i<scc[the].size();i++)
{
printf("%d",scc[the][i]);
if(i==scc[the].size()-1) puts("");
else printf(" ");
}
return 0;
}
Codeforces Round #469 (Div. 1) 949C C. Data Center Maintenance (Div. 2 950E)的更多相关文章
- CF949C Data Center Maintenance(建图+强联通分量)
题意 有 n 个信息中心,第 i 个信息中心要在第 ti 个小时维护,维护期间信息不能被获得. 每个用户的数据都有两份备份,第 i 个用户的数据放在信息中心 c(i,1) 和 c(i,2). 现在要挑 ...
- Codeforces Round #469 (Div. 2)
Codeforces Round #469 (Div. 2) 难得的下午场,又掉分了.... Problem A: 怎么暴力怎么写. #include<bits/stdc++.h> #de ...
- Codeforces Round #469 Div. 2 A B C D E
A. Left-handers, Right-handers and Ambidexters 题意 \(l\)个左撇子,\(r\)个右撇子,\(a\)个两手均可.要组成一支队伍,里面用左手的人数与用右 ...
- Codeforces Round #469 Div. 2题解
A. Left-handers, Right-handers and Ambidexters time limit per test 1 second memory limit per test 25 ...
- Codeforces 950.E Data Center Maintenance
E. Data Center Maintenance time limit per test 1 second memory limit per test 512 megabytes input st ...
- Docker Data Center系列(一)- 快速搭建云原生架构的实践环境
本系列文章演示如何快速搭建一个简单的云原生架构的实践环境. 基于这个基础架构,可以持续部署微服务架构的应用栈,演练敏捷开发过程,提升DevOps实践能力. 1 整体规划 1.1 拓扑架构 1.2 基础 ...
- Docker Data Center系列(二)- UCP安装指南
本系列文章演示如何搭建一个mini的云平台和DevOps实践环境. 基于这套实践环境,可以部署微服务架构的应用栈,演练提升DevOps实践能力. 1 系统要求 1.1 硬件和软件要求 Linux内核版 ...
- Docker Data Center系列(四)- 离线安装UCP和DTR
本系列文章演示如何搭建一个mini的云平台和DevOps实践环境. 基于这套实践环境,可以部署微服务架构的应用栈,演练提升DevOps实践能力. 1 离线安装UCP 1.1 可用版本 Version ...
- Docker Data Center系列(三)- DTR安装指南
本系列文章演示如何搭建一个mini的云平台和DevOps实践环境. 基于这套实践环境,可以部署微服务架构的应用栈,演练提升DevOps实践能力. 1 系统要求 1.1 硬件和软件要求 成为UCP管理的 ...
随机推荐
- vue中设置全局的css样式
只需在main.js ====import './style.less' main.js =>> import Vue from 'vue' import App from ...
- 03 HttpServletRequest_HttpServletResponse
HttpServletRequest:一次来自客户端的请求的相关信息 请求行 request.getMethod() 获取http请求方式 request.getRequestURI() 获取统一资源 ...
- JS 03事件
<script type="text/javascript"> function getUserInput() { //获取用户输入的内容 var val = docu ...
- canvas绘制文本自动换行
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...
- ajax回调函数,全局变量赋值后,ajax外无法获取的解决
1 ajax回调函数内,function的执行与ajax外是异步的,常导致全局变量赋值后,再次使用此变量人无法获取. 所以,可以把需要的步骤,独立放在functuon中,在ajax回调函数中执行.可较 ...
- array_chunk — 将一个数组分割成多个
说明 array_chunk ( array $array , int $size [, bool $preserve_keys = false ] ) : array 将一个数组分割成多个数组,其中 ...
- ORA-07445: exception encountered: core dump [opiaba()+639] [SIGSEGV] [ADDR:0x0] [PC:0x1858C3F] [SI_KERNEL(general_protection)] []
开发反馈应用无法连接数据库,发现数据库实例崩溃,且数据库为11.2.0.4 单实例. 数据库告警日志发现,数据库崩溃之前出现ORA- ORA-: exception encountered: core ...
- 用户注册&单点登录
package com.tttttt.portal.controller; import java.util.HashMap; import java.util.Map; import javax.s ...
- Python练习_函数进阶_day10
1. 1.作业 1,写函数,接收n个数字,求这些参数数字的和.(动态传参) 2,读代码,回答:代码中,打印出来的值a,b,c分别是什么?为什么? a=10 b=20 def test5(a,b): p ...
- openmp 和 thread 性能实测
#include <stdio.h> #include <iostream> #include <thread> #include<omp.h> //# ...