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. ObjectDataProvider

    <Window.Resources> <ObjectDataProvider x:Key="personList" ObjectType="{x:Typ ...

  2. ItemsPanelTemplate

    用以定义集合控件的容器外观,如ListBox,Combox 等等使用一个自定义的ListBox用以说明,其默认外观是上下排列,这里修改成横向排列 <Window.Resources> &l ...

  3. js 评分

    <!DOCTYPE html><html lang="en" xmlns="http://www.w3.org/1999/xhtml"> ...

  4. C# 自定义泛型类,并添加约束

    using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...

  5. VS.NET版本与VC版本对应关系

    VC++编译器版本 IDE版本 VC6 VC6.0 VC7 VS2003 VC8 VS2005 VC9 VS2008 VC10 VS2010 VC11 VS2012 VC12 VS2013 VC14 ...

  6. 浅谈.NET(C#)与Windows用户账户信息的获取

    原文:浅谈.NET(C#)与Windows用户账户信息的获取 目录 1. 用户账户名称 - 使用Environment类 2. 用户账户信息 - 使用WindowsIdentity和IdentityR ...

  7. 子函数内malloc分配内存,论如何改变指针参数所指内存,二级指针、三级指针的应用

    工作中优化一段代码,代码中有一大段分配堆内存的内容,我觉得这段代码太长了,更适合放在子函数里面. 我把指针作为参数,然后在子函数中malloc分配内存,结果出现了问题,函数结束后,以参数传进来的指针并 ...

  8. 各种 MacBook 和 5K iMac 屏幕分辨率对比

    苹果全新 12寸超薄 MacBook 比曾经最薄的 MacBook Air 更薄,不过却配备了Retina 显示屏.12寸 Retina MacBook 上的显示屏分辨率为2304*1440,虽然不如 ...

  9. QT+OpenCV+OpenGL安装

    Ubuntu 10.04.3 LTS ("fresh" install) OpenCV 2.3.1 Qt SDK version 1.2.0 for Linux/X11 32-bi ...

  10. 使用 acl 编写 UDP 网络程序(UDP 重传及可靠性机制)

    在当今网络世界,虽然大部分网络应用都是基于 TCP 的,但有时 UDP 的网络通信也有用武之处.acl 的网络库中不仅提供了基于 TCP 的网络套接字流,同时也提供了 UDP 的网络库(目前 acl ...