要点

  • 题目传送
  • 题目本质是每个点必属于两个集合中的一个,伴随的性质是:如果一个人说别人true,则他们一定属于同一阵营;如果说别人fake,一定不属于同一阵营。
  • 每个点拆为\(i\)和\(i + n\)分别代表他属于某种阵营(目前还不确定),然后根据上述性质边读入边合并同类。
  • 这样扫一遍,如果某个\(i\)和\(i + n\)属于同一阵营则矛盾,无解。
  • 若有解,对于每个点扫一遍和他同阵营的人,为了使fakeman尽可能地少,\(<=n\)的人少就把\(<=n\)视为fakeman;否则把\(>n\)的视为fakeman。
#include <bits/stdc++.h>
using namespace std; const int maxn = 1e5 + 5;
int T, n, m;
int f[maxn << 1], ans[maxn], sz[maxn << 1];
vector<int> v[maxn << 1]; int getf(int v) {
return v == f[v] ? v : f[v] = getf(f[v]);
} void merge(int u, int v) {
f[getf(u)] = getf(v);
} int main() {
for (scanf("%d", &T); T--;) {
scanf("%d %d", &n, &m); for (int i = 1; i <= n * 2; i++) f[i] = i, v[i].clear();
memset(ans, 0, sizeof ans);
memset(sz, 0, sizeof sz); for (int i = 1, u, v, w; i <= m; i++) {
scanf("%d %d %d", &u, &v, &w);
if (w) merge(u, v), merge(u + n, v + n);
else merge(u, v + n), merge(u + n, v);
} int flag = 1;
for (int i = 1; i <= n; i++)
if (getf(i) == getf(i + n)) {
flag = 0; break;
}
if (!flag) {
puts("-1"); continue;
} for (int i = 1; i <= n * 2; i++) v[getf(i)].push_back(i);
for (int i = 1; i <= n; i++) sz[getf(i)]++; for (int i = 1; i <= n; i++) {
if (ans[i]) continue;
int fa = getf(i);
if (v[fa].size() - sz[fa] >= sz[fa]) {
for (int j : v[fa])
if (j > n) ans[j - n] = 2;
else ans[j] = 1;
} else {
for (int j : v[fa])
if (j > n) ans[j - n] = 1;
else ans[j] = 2;
}
}
for (int i = 1; i <= n; i++) printf("%d", ans[i] - 1);
puts("");
}
}

最新文章

  1. C#泛型文章汇总
  2. qt-5.6.0 移植之qt文件系统的建立
  3. (medium)LeetCode 210.Course Schedule II
  4. ISP与IAP的区别
  5. Proactor设计模式:单线程高并发
  6. 个人比较喜欢的Sublime Text主题
  7. 使用aespython进行ECB加解密示例
  8. [Linux]Vim的安装及使用
  9. poj1463(树形dp)
  10. MySQL的一些基本操作
  11. Android6.0-运行时权限处理
  12. java面向对象整理
  13. Eclipse 插件安装、升级和卸载的方法
  14. [BZOJ2761] [JLOI2011] 不重复数字 (set)
  15. WcPro项目(WordCount优化)
  16. linux解压缩文件名乱码问题 亲测可用
  17. Java遍历HashMap并修改(remove)(转载)
  18. 《汇编语言 基于x86处理器》第九章字符串与数组部分的代码
  19. WPF 简易进度条效果
  20. sublime--package control的配置与插件安装

热门文章

  1. 分享知识-快乐自己:Hibernate各种查询操作
  2. 分享知识-快乐自己:IDEA 导入(web)项目并部署到 Tomcat
  3. SENet(Squeeze-and-Excitation Networks)算法笔记---通过学习的方式来自动获取到每个特征通道的重要程度,然后依照这个重要程度去提升有用的特征并抑制对当前任务用处不大的特征
  4. SpringMVC框架&lt;mvc:default-servlet-handler/&gt;的作用
  5. linux 多线程编程-读写者问题
  6. POJ3237 Tree(树剖+线段树+lazy标记)
  7. apache之访问本地文件,绑定域名
  8. mysql数据库表分区详解(数量过大的数据库表通过分区提高查询速度)
  9. check_MK安装部署(nagios4版本)
  10. Windows下搭建svn服务器端--创建自…