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)的更多相关文章

  1. CF949C Data Center Maintenance(建图+强联通分量)

    题意 有 n 个信息中心,第 i 个信息中心要在第 ti 个小时维护,维护期间信息不能被获得. 每个用户的数据都有两份备份,第 i 个用户的数据放在信息中心 c(i,1) 和 c(i,2). 现在要挑 ...

  2. Codeforces Round #469 (Div. 2)

    Codeforces Round #469 (Div. 2) 难得的下午场,又掉分了.... Problem A: 怎么暴力怎么写. #include<bits/stdc++.h> #de ...

  3. Codeforces Round #469 Div. 2 A B C D E

    A. Left-handers, Right-handers and Ambidexters 题意 \(l\)个左撇子,\(r\)个右撇子,\(a\)个两手均可.要组成一支队伍,里面用左手的人数与用右 ...

  4. Codeforces Round #469 Div. 2题解

    A. Left-handers, Right-handers and Ambidexters time limit per test 1 second memory limit per test 25 ...

  5. Codeforces 950.E Data Center Maintenance

    E. Data Center Maintenance time limit per test 1 second memory limit per test 512 megabytes input st ...

  6. Docker Data Center系列(一)- 快速搭建云原生架构的实践环境

    本系列文章演示如何快速搭建一个简单的云原生架构的实践环境. 基于这个基础架构,可以持续部署微服务架构的应用栈,演练敏捷开发过程,提升DevOps实践能力. 1 整体规划 1.1 拓扑架构 1.2 基础 ...

  7. Docker Data Center系列(二)- UCP安装指南

    本系列文章演示如何搭建一个mini的云平台和DevOps实践环境. 基于这套实践环境,可以部署微服务架构的应用栈,演练提升DevOps实践能力. 1 系统要求 1.1 硬件和软件要求 Linux内核版 ...

  8. Docker Data Center系列(四)- 离线安装UCP和DTR

    本系列文章演示如何搭建一个mini的云平台和DevOps实践环境. 基于这套实践环境,可以部署微服务架构的应用栈,演练提升DevOps实践能力. 1 离线安装UCP 1.1 可用版本 Version ...

  9. Docker Data Center系列(三)- DTR安装指南

    本系列文章演示如何搭建一个mini的云平台和DevOps实践环境. 基于这套实践环境,可以部署微服务架构的应用栈,演练提升DevOps实践能力. 1 系统要求 1.1 硬件和软件要求 成为UCP管理的 ...

随机推荐

  1. 【51nod】1407 与与与与

    [51nod]1407 与与与与 设\(f(x)\) 为\(A_{i} \& x == x\)的\(A_{i}\)的个数 设\(g(x)\)为\(x\)里1的个数 \(\sum_{i = 0} ...

  2. MySQL合理配置连接池数量

      我们经常会遇见“MySQL:ERROR1040:Toomanyconnections”的情况,一种是访问量确实很高,MySQL服务器抗不住,这个时候就要考虑增加从服务器分散读写压力,另外一种情况是 ...

  3. 公式编辑器之 AxMath(18)

    1. 使用教程 视频教程,一共有18集,每集都比较短. >> 视频教程链接:B站,速度快,清晰 2. 破解软件下载链接 >> 下载链接:复制链接到迅雷或IDM下载很快 3. M ...

  4. Python基础 第6章 抽象

    1. 引言及抽象和结构 生成斐波那契数列的代码如下: fibs = [0, 1] num = int(input('How many num you want:')) for x in range(n ...

  5. 【数据结构】P1981 表达式求值

    题目描述 给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值. 输入格式 一行,为需要你计算的表达式,表达式中只包含数字.加法运算符“++”和乘法运算符“×”,且没有括号,所有参与运算的数字 ...

  6. winform c# 请求网站,返回Json字符串

    private void callApibjhb() { //输出执行的开始时间 Console.WriteLine(string.Format("Bind {0}", DateT ...

  7. 用户注册&单点登录

    package com.tttttt.portal.controller; import java.util.HashMap; import java.util.Map; import javax.s ...

  8. HelenOS

    HelenOS 来源 http://www.helenos.org/ 关于HELENOS HelenOS是一种基于便携式微内核的多服务器操作系统,从头开始设计和实现.它将关键操作系统功能(如文件系统, ...

  9. spring将service添加事务管理,在applicationContext.xml文件中的设置

    在applicationContext.xml文件中的设置为: <beans> <bean id="sessionFactory" class="org ...

  10. Eclipse中如何创建一个完整的Maven-Web项目

    Maven Web项目搭建 1.首先确保本地开发环境搭建完毕(jdk,maven). 2.打开Eclipse,新建Maven项目.选择Maven Project选项. 3.将第一项:Create a ...