P3496 [POI2010]GIL-Guilds

题意

给一张无向图,要求你用黑(\(K\))白(\(S\))灰(\(N\))给点染色,且满足对于任意一个黑点,至少有一个白点和他相邻;对于任意一个白点,至少有一个黑点与他相邻,对于任意一个灰点,至少同时有一个黑点和白点和灰点与他相邻,问能否成功。成功则输出TAK并输出每个点的颜色,否则输出一行NIE

思路

我来找一道水题...艹怎么这么难。 --Mercury

这是一道结论题,看起来很不可做,但实际上只需要分析一下就会发现并不难。

  • 对于一张有解的无向图,若不把点染成灰色也一定有解。

    • 既然灰点需要旁边同时有白点和黑点,那么这个点既满足被染成白色的条件也满足被染成黑色的条件,而灰点对于染黑和染白没有任何贡献,我们把一种解中的灰点改为黑点或是白点也一定是一种解。
  • 对于一张\(n\)个点的无向连通图\((n\geq 2)\),其一定有解。
    • 对于\(n=2\),显然成立。那么对于\(n\geq 3\),假设\(n-1\)个点时有解,那么再加入一个点,并把它和其他点相连,它的旁边一定会有一个被染色的点,无论黑白,那么它一定满足被染成黑色或白色,所以这样的图也有解,由数学归纳法,得证。
  • 无解的情况有且仅有无向图中的最小联通块的大小为\(1\)。
    • 由上一结论,当\(n\geq 2\)时一定有解,当\(n=1\)时它不满足被染成任何一种颜色,无解。得证。

所以,我们只需要将点染成任意颜色,将与这个点相连的所有点染成相反颜色,在染色过程中判断当前联通块大小,就能构造出一个解了。

AC代码

#include<bits/stdc++.h>
using namespace std;
const int MAXN=2e5+5;
const int MAXM=1e6+5;
int n,m,col[MAXN];
int cnt,top[MAXN],to[MAXM],nex[MAXM];
char hjj[3]={'@','K','S'};
int read()
{
int re=0;char ch=getchar();
while(!isdigit(ch)) ch=getchar();
while(isdigit(ch)) re=(re<<3)+(re<<1)+ch-'0',ch=getchar();
return re;
}
int dfs(int now)
{
int re=1;
for(int i=top[now];i;i=nex[i])
{
if(col[to[i]]) continue;
col[to[i]]=2/col[now];
re+=dfs(to[i]);
}
return re;
}
int main()
{
n=read(),m=read();
while(m--)
{
int x=read(),y=read();
to[++cnt]=y,nex[cnt]=top[x],top[x]=cnt;
to[++cnt]=x,nex[cnt]=top[y],top[y]=cnt;
}
for(int i=1;i<=n;i++)
if(!col[i])
{
col[i]=1;
if(dfs(i)==1)
{
printf("NIE");
return 0;
}
}
puts("TAK");
for(int i=1;i<=n;i++) printf("%c\n",hjj[col[i]]);
return 0;
}

Luogu P3496 [POI2010]GIL-Guilds(贪心+搜索)的更多相关文章

  1. Luogu 1979 NOIP 2013 华容道(搜索,最短路径)

    Luogu 1979 NOIP 2013 华容道(搜索,最短路径) Description 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次.于是,他想到用编程来完成华容道:给定一种局面 ...

  2. Luogu 1514 引水入城 (搜索,动态规划)

    Luogu 1514 引水入城 (搜索,动态规划) Description 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个N行M列的矩形,如上图 ...

  3. 洛谷 P3496 [POI2010]GIL-Guilds

    P3496 [POI2010]GIL-Guilds 题目描述 King Byteasar faces a serious matter. Two competing trade organisatio ...

  4. Luogu 1090 合并果子(贪心,优先队列,STL运用)

    Luogu 1090 合并果子(贪心,优先队列,STL运用) Description 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每 ...

  5. 【NLP】选择目标序列:贪心搜索和Beam search

    构建seq2seq模型,并训练完成后,我们只要将源句子输入进训练好的模型,执行一次前向传播就能得到目标句子,但是值得注意的是: seq2seq模型的decoder部分实际上相当于一个语言模型,相比于R ...

  6. 集束搜索beam search和贪心搜索greedy search

    贪心搜索(greedy search) 贪心搜索最为简单,直接选择每个输出的最大概率,直到出现终结符或最大句子长度. 集束搜索(beam search) 集束搜索可以认为是维特比算法的贪心形式,在维特 ...

  7. Luogu 2540 斗地主增强版(搜索,动态规划)

    Luogu 2540 斗地主增强版(搜索,动态规划) Description 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的A到K加上大小王的共54张牌来进行的扑克牌游 ...

  8. Luogu 2668 NOIP 2015 斗地主(搜索,动态规划)

    Luogu 2668 NOIP 2015 斗地主(搜索,动态规划) Description 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的A到K加上大小王的共54张牌来 ...

  9. Luogu 1970 NOIP2013 花匠 (贪心)

    Luogu 1970 NOIP2013 花匠 (贪心) Description 花匠栋栋种了一排花,每株花都有自己的高度.花儿越长越大,也越来越挤.栋栋决定把这排中的一部分花移走,将剩下的留在原地,使 ...

随机推荐

  1. scala 中List的简单使用

    /** * scala 中List的使用 * */ object ListUse { def main(args: Array[String]): Unit = { def decorator(l:L ...

  2. Windows taskkill

    TASKKILL [/S system [/U username [/P [password]]]]         { [/FI filter] [/PID processid | /IM imag ...

  3. Cocos2d-x通过Jni实现C++与Java相互调用

    在cocos2dx项目中与运营平台(java sdk)对接时使用了JNI. 通过C++调用Java 在JniUtil.h文件中如下实现: #ifndef _JNIUTIL_H_ #define _JN ...

  4. 19.SimLogin_case05

    # 使用自造的cookies登录马蜂窝 import requests from lxml import etree str = 'mfw_uuid=5bcfcc20-b235-fbbe-c1d6-a ...

  5. 16.ajax_case09

    import requests import json import re from selenium import webdriver from selenium.webdriver.common. ...

  6. 初识OpenCV-Python - 006: 图像的几何变换

    本次小节学习了图像的变换,主要应用到如下方法: cv2.resize(), cv2.warpAffine(), cv2.getRotationMatrix2D(), cv2.getAffineTran ...

  7. selenium基础(鼠标和键盘事件)

    selenium鼠标和键盘的操作事件 webdriver常见的几种操作方法 clear():清楚文本文字 send_keys(values):模拟按键输入,values是输入的内容 click():单 ...

  8. Linux vi和vim编辑器(1)

    1:vi和vim的三种常见模式  1.1正常模式 在正常模式下,我们可以使用快捷键: 以vim打开一个档案就直接进入一般模式了(这是默认的模式).在这个模式中,你可以使用[上下左右」按键来移动光标,你 ...

  9. I-country

    I-country 在\(n\times m\)的网格图中,给出每个格子的权值,寻找有k个格子的凸联通块,使包含的权值最大,\(N,M≤15,K≤225\). 解 我们首先要知道凸联通块的定义 从任意 ...

  10. Loadrunner学习---脚本编写(1)

    Loadrunner学习---脚本编写(1) 中午看了两集<奋斗>发现越看越想看,但是想到好不容易没上班,在家还是赶紧学习下LR的知识吧.下面这个网页的文章原来也是看过的,但发现没几天就忘 ...