题目:http://codeforces.com/contest/949/problem/C

可以想到可能是每组c有连边的可能。

但别直接给c1、c2连边,那样之后会变得很不好做。

可以把一些限制放在连边这个环节上。

也就是只有(c1+1)%h==c2才从c1向c2连边表示选了c1必须选c2!c2向c1也是一样。

然后缩个点找无出度的最小的点就行了。

边注意开成两倍——一组c也可能连两条边,%2之类的。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=1e5+;
int n,m,h,a[N],hd[N],xnt,dfn[N],low[N],tim;
int stack[N],top,cnt,col[N],siz[N],cd[N],ans=0x3f3f3f3f,prn;
bool ins[N];
struct Ed{
int nxt,fr,to;
Ed(int n=,int f=,int t=):nxt(n),fr(f),to(t) {}
}ed[N<<];//!!!有可能(%2,一个c连两条边)
void add(int x,int y)
{
ed[++xnt]=Ed(hd[x],x,y);hd[x]=xnt;
}
void tarjan(int cr,int f)
{
dfn[cr]=low[cr]=++tim;
stack[++top]=cr;ins[cr]=;
for(int i=hd[cr],v;i;i=ed[i].nxt)
if(ins[v=ed[i].to])low[cr]=min(low[cr],dfn[v]);//directed edge,don't worry fa
else if(!dfn[v])tarjan(v,cr),low[cr]=min(low[cr],low[v]);
if(dfn[cr]==low[cr])
{
cnt++;
while(stack[top]!=cr)col[stack[top]]=cnt,ins[stack[top--]]=,siz[cnt]++;
top--;col[cr]=cnt;ins[cr]=;siz[cnt]++;
}
}
int main()
{
scanf("%d%d%d",&n,&m,&h);
for(int i=;i<=n;i++)scanf("%d",&a[i]);
int x,y;
for(int i=;i<=m;i++)
{
scanf("%d%d",&x,&y);
if((a[x]+)%h==a[y])add(x,y);if((a[y]+)%h==a[x])add(y,x);
}
for(int i=;i<=n;i++)if(!dfn[i])tarjan(i,);
for(int i=,v;i<=xnt;i++)
if((v=col[ed[i].fr])!=col[ed[i].to])cd[v]++;
for(int i=;i<=cnt;i++)
if(!cd[i]&&siz[i]<ans)ans=siz[i],prn=i;
printf("%d\n",ans);
for(int i=;i<=n;i++)
if(col[i]==prn)printf("%d ",i);
return ;
}

CF 949C Data Center Maintenance——思路+SCC的更多相关文章

  1. codeforces 949C - Data Center Maintenance【tarjan】

    首先转换图论模型,把某个客户一个终端的维修时间(+1)%h之后和另一个终端维修时间一样,这样的两个终端连一条有向边,表示推后一个终端就必须推后另一个 然后tarjan缩点,一个scc里的终端是要一起推 ...

  2. CF 949C Data Center Maintenance_强联通分量_思维题

    题意: 某土豪公司建立了n个数据中心,把m份资料每份在其中的两个数据中心备份. 每个数据中心在一天h个小时当中有一个小时需要维护,此时不提供资料下载服务. 现在土豪公司想要将其中若干个数据中心的维护时 ...

  3. Codeforces 949C(Data Center Maintenance,Tarjan缩点)

    难度系数:1900 graphs 题意:有 n 个银行,m 个客户,每个客户都把自己的资料放在 2 个银行,一天总共有 h 小时,每个银行每天都要维护一小时,这一小时内银行无法工作,但是这一小时客户仍 ...

  4. Codeforces 950.E Data Center Maintenance

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

  5. 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 缩 ...

  6. Codeforces 950E Data Center Maintenance 强连通分量

    题目链接 题意 有\(n\)个信息中心,每个信息中心都有自己的维护时间\((0\leq t\lt h)\),在这个时刻里面的信息不能被获得. 每个用户的数据都有两份备份,放在两个相异的信息中心(维护时 ...

  7. codeforce469DIV2——E. Data Center Maintenance

    题意: 有n个数据中心,m个客户,每天有h个小时,其中 n,m,h<=100000.每个数据中心i每天都会有一个数据维护的时间0<=u[i]<=h-1,在数据中心维护期间时不可以使用 ...

  8. cf950e Data Center Maintenance

    若推迟 \(u\) 必推迟 \(v\),则连边 <\(u,v\)>. 求强联通分量后缩点,答案显然是出度为 \(0\) 且 size 最小的 scc. #include <iostr ...

  9. CF949 C Data Center Maintenance——边双连通分量

    题目:http://codeforces.com/contest/949/problem/C 把一个点指向修改它会影响到的点就可以做了: 有取模,所以多出一些要注意的地方,首先是可能出现环,所以需要 ...

随机推荐

  1. p2p网络中的NAT穿透技术----常见NAT穿越解决方案

    转:http://blog.csdn.net/cllzw/article/details/46438257 常见NA丁穿越解决方案 NAT技术在缓解IPv4地址紧缺问题.构建防火墙.保证网络安全等方面 ...

  2. MySQL运维问题集锦

    1.莫名的慢查询问题.解决思路:http://hidba.org/?spm=5176.153233.793262.6.d75LDx&p=1119

  3. 最长公共子序列的C++实现---附二维指针的使用方法

    想了挺久到底第一篇在这儿的博客写什么好,刚好这两天又一次看到动态规划的LCS算法觉得还是有点意思的,就拿来写了写,第一篇博客就发它吧. #include<iostream> #includ ...

  4. unity json解析IPA后续

    以前说到的,有很大的限制,只能解析简单的类,如果复杂的就会有问题,从老外哪里看到一片博客,是将类中的list   等复杂对象序列化, using UnityEngine; using System.C ...

  5. 2.virtualenv安装和配置以及在PyCharm中如何使用虚拟环境

    virtualenv优点 使不同应用开发环境相互独立 环境升级不影响其它应用,也不会影响全局的python环境 它可以防止系统中出现包管理混乱和版本的冲突 1.使用virtualenv pip ins ...

  6. 安装配置Apollo-Prota web中心平台

    首先要求2g以上内存哈,JDK1.8 搭建数据库 创建表 apollo-build-scripts-master 整个阿波罗环境包 使用一个命令启动整个阿波罗服务环境 创建两个数据库 分别为:apol ...

  7. Python httpServer服务器(初级)

    使用原生的python开发的web服务器,入门级! #!/usr/bin/python # -*- coding: UTF-8 -*- import os #Python的标准库中的os模块包含普遍的 ...

  8. vue-router scrollBehavior无效的问题及解决方案

    在使用vue做单页面应用开发时候 使用vue-router作为路由控制器  在使用过程中发现每个页面打开都在原来的位置 不能返回到页面顶部位置 ,然后查看api文档 滚动行为  发现如下代码: con ...

  9. Python DB API 连接数据库

    Python DB API Mysql,Oracle,SqlServer 不关闭,会浪费资源.

  10. 定义类+类实例化+属性+构造函数+匿名类型var+堆与栈+GC回收机制+值类型与引用类型

    为了让编程更加清晰,把程序中的功能进行模块化划分,每个模块提供特定的功能,而且每个模块都是孤立的,这种模块化编程提供了非常大的多样性,大大增加了重用代码的机会. 面向对象编程也叫做OOP编程 简单来说 ...