http://codeforces.com/gym/100502/attachments

题意:有n个地点,m条边,每条边有一个边权,0代表两个顶点都染成白色,2代表两个顶点都染成黑色,1代表两个顶点可能尚未染色,但是之后必须一个染成白色一个染成黑色。问是否有可能让这个图成功染色,如果可能输出染成黑色的最少顶点数。

思路:一开始0和2的边是确定的,直接染,如果有矛盾直接false。然后利用边权为1的边建图。先考虑如果图中的某个点已经染色了,那么直接DFS染色,然后这个阶段出现黑色的点是确定的(因为必须染成这个颜色),如果出现矛盾就返回。

再考虑如果图中没有点染色,这个时候随便染一种颜色,用两个计数器a和b,代表这个阶段染成白色的点和黑色的点的数目,这个对答案的贡献为min(a, b),因为点都是不确定的,所以染成白和染成黑都是一样的,所以可以互换,然后出现矛盾就返回。

 #include <bits/stdc++.h>
using namespace std;
#define N 200010
struct Edge {
int v, nxt;
} edge[N*];
int vis[N], head[N], tot, col[N], a, b, ans; void Add(int u, int v) {
edge[tot] = (Edge) {v, head[u]}; head[u] = tot++;
edge[tot] = (Edge) {u, head[v]}; head[v] = tot++;
} bool DFS(int u, int c, int kind) {
if(kind) {
if(col[u] == ) b++; else a++;
} else {
if(col[u] == ) ans++;
}
for(int i = head[u]; ~i; i = edge[i].nxt) {
int v = edge[i].v;
if(col[v] == c) return false;
if(!vis[v]) { vis[v] = ; if(col[v] == ) col[v] = -c; if(!DFS(v, col[v], kind)) return false; }
}
return true;
} int main() {
int n, m;
scanf("%d%d", &n, &m);
memset(head, -, sizeof(head));
bool flag = ;
for(int i = ; i < m; i++) {
int u, v, k;
scanf("%d%d%d", &u, &v, &k);
if(k == ) {
if(col[u] == - || col[v] == -) flag = ;
col[u] = col[v] = ;
} else if(k == ) {
if(col[u] == || col[v] == ) flag = ;
col[u] = col[v] = -;
} else Add(u, v);
}
for(int i = ; i <= n; i++)
if(!vis[i] && col[i]) { vis[i] = ; if(!DFS(i, col[i], )) flag = ; }
for(int i = ; i <= n; i++) {
if(vis[i]) continue;
a = ; b = ; vis[i] = ; col[i] = ;
if(!DFS(i, , )) flag = ;
ans += a > b ? b : a;
}
if(!flag) puts("impossible");
else printf("%d\n", ans);
return ;
}

Codeforces Gym100502A:Amanda Lounges(DFS染色)的更多相关文章

  1. Codeforces Codeforces Round #383 (Div. 2) E (DFS染色)

    题目链接:http://codeforces.com/contest/742/problem/E 题意: 有一个环形的桌子,一共有n对情侣,2n个人,一共有两种菜. 现在让你输出一种方案,满足以下要求 ...

  2. Codeforces 781A:Andryusha and Colored Balloons(DFS染色)

    http://codeforces.com/contest/782/problem/C 题意:给一棵树染最少的颜色,使得相邻距离为2的点都是不同的颜色,问最少是多少种颜色并输出每个点的颜色. 思路:比 ...

  3. Codeforces 1144F Graph Without Long Directed Paths DFS染色

    题意: 输入一张有向图,无自回路和重边,判断能否将它变为有向图,使得图中任意一条路径长度都小于2. 如果可以,按照输入的边的顺序输出构造的每条边的方向,构造的边与输入的方向一致就输出1,否则输出0. ...

  4. cf804C(dfs染色)

    题目链接: http://codeforces.com/problemset/problem/804/C 题意: 有一颗含有 n 个顶点的树, 第 i 个顶点上有 k 个冰激凌, 每个冰激凌的种类为 ...

  5. Gym - 100502A Amanda Lounges

    Amanda Lounges Time Limit: 1000MS   Memory Limit: 524288KB   64bit IO Format: %I64d & %I64u AMAN ...

  6. hdu 4751(dfs染色)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4751 思路:构建新图,对于那些两点连双向边的,忽略,然后其余的都连双向边,于是在新图中,连边的点是能不 ...

  7. hdu 5313 Bipartite Graph(dfs染色 或者 并查集)

    Problem Description Soda has a bipartite graph with n vertices and m undirected edges. Now he wants ...

  8. hdu 4751 Divide Groups(dfs染色 或 2-sat)

    Problem Description   This year is the 60th anniversary of NJUST, and to make the celebration more c ...

  9. 紫书 习题8-9 UVa 1613 (dfs染色+图的性质)

    这道题一开始我没想什么直接开始染, 但是是for循环一个节点一个节点染, 然后就WA 后了看了https://www.cnblogs.com/jerryRey/p/4702323.html 发现原来还 ...

随机推荐

  1. Java Swing编程接口(30)---列表框:JList

    列表框同时可以在信息呈现给用户的列表多个选项,使用JList能够建立一个列表框. package com.beyole.util; import java.awt.Container; import ...

  2. 你所不知道的 Kindle - 阅读微信公众号文章

    Kindle 是一款非常优秀的阅读设备,它为我们提供了非常舒服的阅读体验,并且配合强大的亚马逊图书资源,应该是目前最好的阅读设备之一.Kindle 在已有的成就下还一直在努力提升用户体验.为中国用户开 ...

  3. WPF加载等待动画

    原文:WPF加载等待动画 原文地址:https://www.codeproject.com/Articles/57984/WPF-Loading-Wait-Adorner 界面遮罩 <UserC ...

  4. VC中出现“烫”和“屯”的原因(栈区的每一个字节都被0xCC填充了,也就是int 3h的机器码,动态分配的堆,VC的Debug用0xCD填充堆的空间,就出现了“屯”)

    相信经常用VC的朋友对屏幕输出的一大堆“烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫”不会陌生,但是也许会很奇怪,为什么会出现“烫”字呢?莫非改程序导致系统运行缓慢,发热过高???非也!下面让我解释 ...

  5. 【SQL Server】SQL Server占用CPU使用率100%的解决方法

    原文:[SQL Server]SQL Server占用CPU使用率100%的解决方法 近日,帮一个客户解决了服务器CPU占用率高达100%的问题. 以前做的一个某污水处理厂自控系统项目,客户反映其自控 ...

  6. asp.net core2.0中网站发布的时候,视图文件不被打包成dll

    项目csproj文件里面加 <Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <Target ...

  7. Delphi的对象注销方法Destroy和free

    当您使用完对象后,您应该及时撤销它,以便把这个对象占用的内存释放出来.您可以通过调用一个注销方法来撤销您的对象,它会释放分配给这个对象的内存. Delphi的注销方法有两个:Destroy和Free. ...

  8. Linux ADF(Atomic Display Framework)浅析---概述

    概述 因为工作关系,最近有涉及到ADF(Atomic Display Framework)相关的内容,部分内容来自互联网 ADF(Atomic Display Framework)是Google新增的 ...

  9. Linux下卸载QT SDK

    unbuntu下卸载QT方法一:you can remove it like this, those developers should add this somewhere ! like next ...

  10. x64系统的判断和x64下文件和注册表访问的重定向(举例了GetProcAddress后转成函数指针的用法)

    判断一个32位应用程序是否运行在x64系统下,可以使用下面的代码: BOOL IsX64System() { BOOL bIsWow64 = FALSE; typedef BOOL (WINAPI * ...