题意

小组里有N个人,每个人都有一个或多个朋友在小组里。将小组分成两个队伍,每个队伍的任意一个成员都有至少一个朋友在另一个队伍。

思路

一开始觉得和前几天做过的一道2-sat(每个队伍任意两个成员都必须互相认识)相似然后就往那边想了……看了题解才发现这题很简单……

我们注意到同组里的人是互不影响的,所以一个人如果已经确定在哪组的话是不会对后面进入这个组的人产生影响的。

所以我们按顺序直接搜就可以了,每个人在他朋友里面找一个已经确定组的,然后放到对面组。如果他的所有朋友都没确定,把他随便放一个组就行了。

代码

[java]
import java.util.*;
import java.util.Map.Entry;
import java.math.*;

public class Main{
static int group[] = new int [205];
static Vector <Vector> adj = new Vector <Vector> ();
public static int divide(int p){
group[p+1] = -2;
for (int j = 0; j < adj.get(p).size(); j ++){
int v = (int) adj.get(p).get(j);
if (group[v] == -1){
return (group[p+1] = 1 - divide(v-1));
}
if (group[v] > -1){
return (group[p+1] = 1 - group[v]);
}
}
if (group[p+1] == -2) return (group[p+1] = 0);
return 0;
}
public static void main(String args[]){
Scanner cin = new Scanner(System.in);
int n = cin.nextInt();
for (int i = 1; i <= n; i ++){
int tmp = 0;
Vector <Integer> tmpv = new Vector <Integer> ();
while((tmp = cin.nextInt()) != 0){
tmpv.addElement(tmp);
}
adj.addElement(tmpv);
}
boolean ok = true;
for (int i = 0; i < adj.size(); i ++){
group[i+1] = -1;
if (adj.get(i).size() == 0){
ok = false;
break;
}
}
for (int i = 0; i < adj.size(); i ++){
group[i+1] = divide(i);
}
if (ok == false){
System.out.println("0");
}
else{
Vector <Integer> ans = new Vector <Integer> ();
for (int i = 1; i <= n; i ++){
if (group[i] == 0){
ans.addElement(i);
}
}
System.out.println(ans.size());
for (int i = 0; i < ans.size(); i ++){
if (i > 0) System.out.print(" ");
System.out.print(ans.get(i));
}
System.out.println("");
}

cin.close();
}
}
[/java]

URAL 1106 Two Teams (DFS)的更多相关文章

  1. URAL 1106 Two Teams二分图

    S - Two Teams Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submi ...

  2. ural 1106. Two Teams 二分图染色

    链接:http://acm.timus.ru/problem.aspx?space=1&num=1106 描述:有n(n<=100)个人,每个人有一个或多个朋友(朋友关系是相互的).将其 ...

  3. ural 1106 Two Teams

    http://acm.timus.ru/problem.aspx?space=1&num=1106 #include <cstdio> #include <cstring&g ...

  4. URAL 1208 Legendary Teams Contest(DFS)

    Legendary Teams Contest Time limit: 1.0 secondMemory limit: 64 MB Nothing makes as old as years. A l ...

  5. ural 1106,二分图染色,DFS

    题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1106 乍一眼看上去,好像二分图匹配,哎,想不出和哪一种匹配类似,到网上查了一下,DFS染 ...

  6. 1106. Two Teams(dfs 染色)

    1106 结点染色 当前结点染为黑 朋友染为白  依次染下去 这题是为二分图打基础吧 #include <iostream> #include<cstdio> #include ...

  7. timus 1106 Two Teams(二部图)

    Two Teams Time limit: 1.0 secondMemory limit: 64 MB The group of people consists of N members. Every ...

  8. URAL 1137Bus Routes (dfs)

    Z - Bus Routes Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Subm ...

  9. ural 1208 Legendary Teams Contest

    题意描述:给定K支队伍,每队三个队员,不同队伍之间队员可能部分重复,输出这些队员同时能够组成多少完整的队伍: DFS,利用DFS深度优先搜索,如果该队所有队员都没有被访问过,那么将该队计入结果,再去选 ...

随机推荐

  1. Lodash 常用API中文参考

    lodash和underscore都是现在非常流行的两个javascript库,提供了一套函数式编程的实用功能. 而lodash本身最初也是underscore的一个fork,因为和其他(Unders ...

  2. Oracle卸载之正确卸载rac数据库的方法(MOS卸载方法)

    一.关闭数据库和资源 1.节点1 [root@node1 bin]# pwd /u01/app/11.2.0/grid/bin [root@node1 bin]# ./crsctl stop crs ...

  3. Linux下手工卸载11.2 RAC(非MOS的deinstall方法)

    思路来自于经典的<How to Proceed From a Failed 10g or 11.1 Oracle Clusterware (CRS) Installation (Doc ID 2 ...

  4. fork(2) - Linux man page

    fork(2): create child process - Linux man page https://linux.die.net/man/2/fork fork(2) - Linux man ...

  5. JavaCollection Java 集合框架

    Spring Injecting Collection https://www.tutorialspoint.com/spring/spring_injecting_collection.htm No ...

  6. Magento 2 初探

    进入公司有一小段时间了,虽然自己之前一直从事前端工作,但是基本工作就是做一些国内电商网站的前端工作.在刚进入这家公司时,自己对 magento2 一无所知,尽管上班前看过老大发给我的一些文档资料,但是 ...

  7. controller中两个方法之间共享一个变量LinkedHashMap

    1:引用传递,创建一个变量,给两个线程都传递进去. 2:静态修饰 static  通过该修饰符说明,该变量只有一份,  所有线程共用一份. 例如下面的htmlidMap通过static变量修饰, up ...

  8. java基础语法 List

    List:元素是有序的(怎么存的就怎么取出来,顺序不会乱),元素可以重复(角标1上有个3,角标2上也可以有个3)因为该集合体系有索引, ArrayList:底层的数据结构使用的是数组结构(数组长度是可 ...

  9. java线程初写,陆续更新中。。

    (1)什么是线程?线程,是程序执行流的最小单元.线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享 ...

  10. shoes的安装前后(一)

    最近看到一个模型用到了shoes,准备自己试一试.搞了半天,也安装不成功.直接安装包,gem install shoes,失败, 从rubygems上下载最新版本的shoes 然后安装,成功了.随便写 ...