题目: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. Tooltip表单验证的注册表单

    在线演示 本地下载

  2. iOS_CLLocation定位

      CoreLocation框架可用于定位设备当前经纬度,通过该框架,应用程序可通过附近的蜂窝基站,WIFI信号或者GPS等信息计算用户位置.      iOS定位支持的3种模式.      (1)G ...

  3. C# 利用TTS实现文本转语音

    TSS(Text To Speech),语音朗读文本的技术,在Windows下台下,微软给我们提供了一套API接口(Speech API).金山词霸的朗读功能就是用的这个接口. WindowsXP自带 ...

  4. Eclipse常用插件安装_PropertiesEditor

    properties文件在项目中多用做i18n国际化支持的配置文件,在properties文件中出现的中文信息都要转换为Unicode文本,一般的做法都是使用JDK自带的native2ascii工具进 ...

  5. nginx面试要点

    首先列出一些面试题目包括nginx和redis的. 1..nginx 框架是怎样的 2. nginx负载均衡的算法怎么实现的,懵逼,说没看过  . nginx 的 upstream目前支持 4 种方式 ...

  6. org.apache.flume.ChannelException: Take list for MemoryTransaction, capacity 100 full, consider committing more frequently, increasing capacity, or increasing thread count

    flume在抽取MySQL数据到kafka时报错,如下 [SinkRunner-PollingRunner-DefaultSinkProcessor] ERROR org.apache.flume.s ...

  7. javascript 内置对象及常见API

    javascript 内置对象及常见API 2012-09-02 15:17 571人阅读 评论(0) 收藏 举报 javascript正则表达式文档浏览器urlstring Javascript内置 ...

  8. pandas通过字典生成dataframe

    1.将一个字典输入: 该字典必须满足:value是一个list类型的元素,且每一个key对应的value长度都相同: (以该字典的key为columns) >>> import pa ...

  9. 深入理解Servlet3.0异步请求

    异步请求的基础概念 异步请求最直接的用法就是处理耗时业务,Http协议是单向的,只能客户端拉不能服务器主推. 异步请求的核心原理主要分为两大类:1.轮询.2长连接 轮询:就是定时获取返回结果. 长连接 ...

  10. myeclipse2017复制项目后如何改web context root

    点中项目,然后alt+enter,或者 然后