博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[CF949C]Data Center Maintenance
阅读量:6285 次
发布时间:2019-06-22

本文共 1749 字,大约阅读时间需要 5 分钟。

题目大意:$n$个点,每个点有一个值$w_i$。$m$个条件,每个条件给出$x,y$,要求$w_x\not =w_y$。选择最少的点,使其值加$1$后,所有条件成立(数据保证有解)。

题解:对于每个条件,若$(w_x+1)\bmod h=w_y$,连上$x->y$;若$(w_y+1)\bmod h=w_x$,连上$y->x$。一条边的含义是,若起点加一,终点也要加一。缩点,强连通分量内的点要一起加。发现答案就是找最小的没有出边的点

卡点:

 

C++ Code:

#include 
#define maxn 100010#define maxm maxn#define gethour(x) ((x + 1) % h)int n, m, h;int w[maxn];int head[maxn << 1], cnt;struct Edge { int from, to, nxt;} e[maxm << 2];inline void addE(int a, int b) { e[++cnt] = (Edge) {a, b, head[a]}; head[a] = cnt;}int DFN[maxn], low[maxn], idx, sz[maxn];int S[maxn], top, res[maxn], CNT;bool ins[maxn];inline int min(int a, int b) {return a < b ? a : b;}void tarjan(int u) { DFN[u] = low[u] = ++idx; ins[S[++top] = u] = true; int v; for (int i = head[u]; i; i = e[i].nxt) { v = e[i].to; if (!DFN[v]) { tarjan(v); low[u] = min(low[u], low[v]); } else if (ins[v]) low[u] = min(low[u], DFN[v]); } if (DFN[u] == low[u]) { CNT++; do { ins[v = S[top--]] = false; sz[res[v] = CNT]++; addE(CNT + n, v); } while (u != v); }}int oud[maxn];int main() { scanf("%d%d%d", &n, &m, &h); for (int i = 1; i <= n; i++) scanf("%d", w + i); for (int i = 0, a, b; i < m; i++) { scanf("%d%d", &a, &b); if (w[a] == gethour(w[b])) addE(b, a); if (w[b] == gethour(w[a])) addE(a, b); } int cnt_now = cnt; for (int i = 1; i <= n; i++) if (!DFN[i]) tarjan(i); for (int i = 1; i <= cnt_now; i++) { int u = e[i].from, v = e[i].to; if (res[u] != res[v]) oud[res[u]]++; } int ans = 0x3f3f3f3f, mini = n + 1; for (int i = 1; i <= CNT; i++) if (!oud[i] && ans > sz[i]) { ans = sz[i]; mini = i + n; } printf("%d\n", ans); for (int i = head[mini]; i; i = e[i].nxt) printf("%d ", e[i].to); puts(""); return 0;}

  

转载于:https://www.cnblogs.com/Memory-of-winter/p/9745756.html

你可能感兴趣的文章
杭电 2899 题解题报告
查看>>
php 多条件查询
查看>>
本机不安装Oracle客户端,使用PL/SQL Developer连接远程数据库
查看>>
mysql 对返回的值是null进行判断和重新赋值
查看>>
【以前的空间】link cut tree
查看>>
Javascript诞生记:C语言和Self语言X的产物
查看>>
rpm包制作介绍及实战操作讲解02(学生分享)
查看>>
趣谈 | Python为什么受欢迎的本质,知道的人寥寥无几?
查看>>
学会拒绝摔倒“哭泣”,拒绝接受“溺爱”
查看>>
交换机惹祸两起
查看>>
话里话外:成功CEO的用人之道——用人所长
查看>>
使用TS Session Broker实现终端服务负载均衡
查看>>
谁比谁傻?
查看>>
针对复杂***的情报分析实例
查看>>
Zabbix之微信订阅号平台报警
查看>>
利用路由器的流量导出功能部署IPS
查看>>
【职场酸甜苦辣咸】辞职总结
查看>>
Xtradb+Haproxy高可用数据库集群(二)haproxy负载均衡篇
查看>>
Centos7系列(一)Centos7新特性、安装与基本命令
查看>>
Wireshark系列之7 利用WinHex还原文件
查看>>