【题目】

给一个无向图,每当对某个点操作,该点以及与该点相连的点都获得标记,问标记所有点至少需要操作多少次

输入

第一行为T,表示测试数据组数

每组测试数据第一行为n(1<=n<=20)表示有n个点,接下来n行,第i行描述与结点i所连的点,首个整数d,接下来有d个整数,表示结点i与它之间有一条边,该图没有自环

输出

每组测试数据输出一行,一个数表示至少需要操作的次数

【题解】

状态压缩+枚举

这道题数据范围好小,那么就应该不是什么特殊的算法了,可以考虑下搜索

将每个点与其他点的关系压缩,记录到数组中(比如a[i]),用一个最长20位的二进制数记录,比如结点i,当他的第j位是1,表示i与j之间有一条边,我们不妨设结点i的第i位为1。

我们设b代表当前每个点是否被标记的状态,第i位为1表示结点i已经被标记,初始时b为0,就是什么点都没有被标记。

那么开始搜索,不断枚举点,比如说枚举第i个结点,则调出来他与其他点的连接关系a[i],则b=b|a[i],一直枚举知道b=1<<n-1即可1<<n-1就是所有点都被标记的状态

但是DFS会超时,我们改变思路,只需枚举每个点是否被标记就可以了,枚举从1到1<<n-1,比如说枚举到i,其第j位为1表示我们对结点j操作,每枚举一个数,就统计一下它的二进制中有多少个1,统计满足条件时1的最小个数就可以了~

【吐槽】

竟然不是DP,竟然不是DP,还好不是,状压DP用着还不熟练。

一开始真的用DFS,但是TLE,接着加了各种剪枝,还是TLE,最后死心想想还是枚举一下标记状态吧,结果竟然AC了,比DFS加上剪枝还要快!还是位运算大法好啊。

【代码】

RunID

User

Problem

Result

Memory

Time

Language

Length

Submit Time

zhyfzy

G

Accepted

0 KB

1516 ms

C++ 4.5.3

939 B

2014-07-31 16:15:30

#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#define eps 0.000001
#define N 30000
#define M 60000
using namespace std;
int i,j,k,n,m,x,y,T,b,a[300],tar,ans,tt; int main()
{
scanf("%d",&T);
while (T--)
{
memset(a,0,sizeof(a));
scanf("%d",&n);
tar=(1<<n)-1;
for (i=1;i<=n;i++)
{
scanf("%d",&k);
a[i]=a[i]|1<<(i-1);
for (j=1;j<=k;j++)
{
scanf("%d",&x);
a[i]=a[i]|1<<(x-1);
}
}
ans=300;b=0;
for (i=1;i<=tar;i++)
{
b=i;tt=0;
for (j=1;j<=n;j++)
if ((b&(1<<(j-1))))
{
tt++;
}
for (j=1;j<=n;j++)
{
if ((i&(1<<(j-1))))
{
b=b|a[j];
if (b==tar) break;
}
}
if (b==tar) ans=min(ans,tt);
}
printf("%d\n",ans);
}
}

LA 6450 Social Advertising的更多相关文章

  1. LA 6450 social advertising(dfs剪枝)

    6450 Social AdvertisingYou have decided to start up a new social networking company. Other existing ...

  2. UVALive 6450 Social Advertising DFS解法

    题意:一些人有朋友关系,在某个人的社交网站上投放广告可以被所有该人的直接朋友看到,问最小投放多少个广告使给出的人都看到广告.(n<=20) 解法:看到n的范围可以想到用二进制数表示每个人被覆盖与 ...

  3. Social media users of the world unite!

    Social media users of the world unite!全世界社交媒体用户联合起来!If Plato were alive today, he might well regard ...

  4. 【targeting学习笔记】Display Advertising Targeting

    背景:stanford的计算广告学(computational advertising)课程,yahoo的人主讲,课程链接:http://www.stanford.edu/class/msande23 ...

  5. What is Dark Social & Dark Traffic?

    What is Dark Social & Dark Traffic? By Iaroslav Kudritskiy Google Analytics is supposed to speak ...

  6. 讲座:Influence maximization on big social graph

    Influence maximization on big social graph Fanju PPT链接: social influence booming of online social ne ...

  7. leggere la nostra recensione del primo e del secondo

    La terra di mezzo in trail running sembra essere distorto leggermente massima di recente, e gli aggi ...

  8. Le lié à la légèreté semblait être et donc plus simple

    Il est toutefois vraiment à partir www.runmasterfr.com/free-40-flyknit-2015-hommes-c-1_58_59.html de ...

  9. [Computational Advertising] 计算广告学笔记之基础概念

    因为工作需要,最近一直在关注计算广告学的内容.作为一个新手,学习计算广告学还是建议先看一下刘鹏老师在师徒网的教程<计算广告学>. 有关刘鹏老师的个人介绍:刘鹏现任360商业产品首席架构师, ...

随机推荐

  1. PHP Countable接口

    实现该接口可以使用count()方法来获取集合的总数

  2. Static Class (静态类)

    一般情况下是不可以用static修饰类的.如果一定要用static修饰类的话,通常static修饰的是匿名内部类. 在一个类中创建另外一个类,叫做成员内部类.这个成员内部类可以静态的(利用static ...

  3. Javascript模块化编程:模块的写法

    声明:本文转载自:阮一峰的网络日志,原文地址http://www.ruanyifeng.com/blog/2012/10/javascript_module.html,http://www.ruany ...

  4. win7设置虚拟wifi

    1. cmd,使用管理员权限打开: 2. 设置:netsh wlan set hostednetwork mode=allow ssid=ABCD key=12345678 mode:是否开启虚拟wi ...

  5. jQuery判断浏览器

    在jQuery1.9版本之前,jQuery 提供了 browser 标记 <script type="text/javascript" src="http://aj ...

  6. 【转】.NET开发者必备的11款免费工具

    摘要:本文介绍一些最适合.NET开发人员简化Web开发的最佳工具,这些工具都是开源的,有的开发工具你既可以从网上下载可执行文件,也可以下载源代码.一些工具拥有可扩展的框架,是一个持续集成工具. 原文链 ...

  7. Flask学习记录之Flask-Login

    Flask-Loging 可以方便的管理用户会话,保护路由只让认证用户访问 http://flask-login.readthedocs.org/en/latest/ 一.初始化Flask-Login ...

  8. sort对二维字符数组排序(转)

    由于二维字符数组的第二维没有赋值运算符,即不能对整个一维数组进行赋值,因此是无法直接对二维数组用sort进行排序的,解决办法有二种: 代码一: #include <iostream> #i ...

  9. light oj 1248 第六周E题(期望)

    E - 期望(经典问题) Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu   Descri ...

  10. python面试题大全

    注:本面试题来源于网络,转载请注明来自http://www.cnblogs.com/goodhacker/p/3366618.html. 1. (1)python下多线程的限制以及多进程中传递参数的方 ...