题目: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. cocos2dx打飞机项目笔记六:GameScene类和碰撞检测 boundingbox

    GameScene类虽然是占用游戏最多时间的类,但是里面的东西不是很多,最重要的就是碰撞检测了,碰撞检测代码如下: void GameScene::detectionCrash() { CCArray ...

  2. INSPIRED启示录 读书笔记 - 第25章 快速响应阶段

    产品出炉后切莫虎头蛇尾 急于“撤军”是项目管理和产品开发流程中的大忌,只要稍微延长项目周期,观察用户对产品的反应,效果就会有天壤之别.这样做投资之小.回报之高会令你瞠目结舌,绝非其他项目阶段可比 产品 ...

  3. Android 下的usb框架及功能点【转】

    本文转载自:https://blog.csdn.net/tianruxishui/article/details/37902959 有关USB android框架的链接 http://blog.sin ...

  4. Struts的url-pattern配置问题

    一,servlet容器对url的匹配过程: 当一个请求发送到servlet容器的时候,容器先会将请求的url减去当前应用上下文的路径作为servlet的映射url,比如我访问的是http://loca ...

  5. Windows 配置Apache以便在浏览器中运行Python script的CGI模式

    打开httpd.conf,找到”#ScriptInterpreterSource Registry “,移除前面的注释# (如果找不到这行,就自己添加进去) 找到“Options Indexes Fo ...

  6. Codeforces 895C Square Subsets:状压dp【组合数结论】

    题目链接:http://codeforces.com/problemset/problem/895/C 题意: 给你n个数a[i].(n <= 10^5, 1 <= a[i] <= ...

  7. json与NSString转换

    json to string NSData *jsonData = [NSJSONSerialization dataWithJSONObject:json options:NSJSONWriting ...

  8. mybatis中&gt;=和&lt;=的实现方式

    原因 mybatis使用的是xml格式的文件.使用>和<号的时候,会存在与xml的标签的规范冲突. 解决方案 >=使用 <![CDATA[>=]]> >< ...

  9. EXCEL对比重复数据

    一.       EXCEL 突出重复项 1.      选择对应的数据 EXCEL 里选择好数据 2.      选择条件格式 这样就完成了数据重复的突出,可以按条件筛选.选择自己想要的数据

  10. Beautifusoup

    text = soup.find('div', {'class': 'mulu'}) #查找目录,坑死我了.就这个东西,知乎上看别人写的爬取网络小说,这个最适合我.我一开始老是使用beautifuls ...