题目: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> #in…
首先转换图论模型,把某个客户一个终端的维修时间(+1)%h之后和另一个终端维修时间一样,这样的两个终端连一条有向边,表示推后一个终端就必须推后另一个 然后tarjan缩点,一个scc里的终端是要一起推迟的,scc内点数为新图点权 根据贪心的思想,在缩完点的DAG里,一定是出度为0的点能获得更小的值,因为出度不为零的点还要加上出边所能到的点的点权 直接在出度为0的点里取min,然后记一下更新答案的新点,最后把属于这个新点的点的编号输出即可 #include<iostream> #include&…
题意: 某土豪公司建立了n个数据中心,把m份资料每份在其中的两个数据中心备份. 每个数据中心在一天h个小时当中有一个小时需要维护,此时不提供资料下载服务. 现在土豪公司想要将其中若干个数据中心的维护时间向后推迟一小时,并要求一天中任意时刻每份资料都可以被下载,问最少选取多少个数据中心维护. 题解: 首先,对于两个备份的地方,我们发现只有 (C[a]+1)(C[a]+1)(C[a]+1) % h==C[b]h==C[b]h==C[b] 时,a,ba,ba,b 两个处理器需要同时后延一小时.于是,建…
难度系数:1900 graphs 题意:有 n 个银行,m 个客户,每个客户都把自己的资料放在 2 个银行,一天总共有 h 小时,每个银行每天都要维护一小时,这一小时内银行无法工作,但是这一小时客户仍然可以在另一个银行提取资料,于是客户就可以一天 h 小时随时提取资料.现在要选择 k 个银行进行实验,每个进行实验的银行,它每天的维护时间都推迟一小时,如果原来的维护时间是 h−1 时,进行实验后银行的维护时间就为 0 时.问最少选择几个银行(至少一个)进行实验,才能仍然保证每一个客户随时都能提取到…
E. Data Center Maintenance time limit per test 1 second memory limit per test 512 megabytes input standard input output standard output BigData Inc. is a corporation that has n data centers indexed from 1 to n that are located all over the world. The…
题 OvO http://codeforces.com/contest/949/problem/C codeforces 949C 950E 解 建图,记原图为 G1,缩点,记缩完点后的新图为G2 缩完点后的图 G2 必定无环,求这个无环图 G2 中每个点的入度, 找出 的那些点,记这些点的集合为 S,然后把 S 中这些点映射到 G1 中,则这些点各自对应一个点集.S 的各点中,对应的最小集合即为所求集合 #include <iostream> #include <cstring>…
题目链接 题意 有\(n\)个信息中心,每个信息中心都有自己的维护时间\((0\leq t\lt h)\),在这个时刻里面的信息不能被获得. 每个用户的数据都有两份备份,放在两个相异的信息中心(维护时间也相异). 现要挑选出信息中心的一个尽量小的子集,使得将这个子集的维护时间向后推移一个小时后,不会导致问题(存在一个用户,其数据所在的两个信息中心维护时间相同). 思路 强连通分量 考虑每个用户的信息存放的两个信息中心,\(u,v\): 如果调整其中任何一个的时间不会导致与另外一个产生冲突,就说明…
题意: 有n个数据中心,m个客户,每天有h个小时,其中 n,m,h<=100000.每个数据中心i每天都会有一个数据维护的时间0<=u[i]<=h-1,在数据中心维护期间时不可以使用的.每个客户都选择两个不同的数据中心,以保证每天的数据使用不间断.保证初始时符合要求.找出最少的数据中心数,使每个数据中心的维护时间推迟一个小时(若u[i]<h-1推迟一小时变为u[i]+1,否则变为0),每个客户都能正常使用. 分析: 我们发现,只要每个客户选择的两个数据中心的维护时间不同就符合题目的…
若推迟 \(u\) 必推迟 \(v\),则连边 <\(u,v\)>. 求强联通分量后缩点,答案显然是出度为 \(0\) 且 size 最小的 scc. #include <iostream> #include <cstdio> using namespace std; int n, m, h, a[100005], dfn[100005], uu, vv, loo[100005], bel[100005], scc, hav[100005], sta[100005],…
题目:http://codeforces.com/contest/949/problem/C 把一个点指向修改它会影响到的点就可以做了: 有取模,所以多出一些要注意的地方,首先是可能出现环,所以需要 tarjan 求边双: 其次,边集数组的大小应该开成两倍,因为取模可能导致一对 ci 互相连边: 然后找出不影响别的点的.最小的边双,输出即可: 而我竟然把 tarjan 都少写了一个 top-- !真是对自己无语了... 代码如下: #include<iostream> #include<…