【题目】

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

输入

第一行为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. 用jquery写了个选项卡,当作一个笔记吧。

    <!DOCTYPE HTML> <html lang="en"> <head> <meta http-equiv="Conten ...

  2. Tinkphp定时发布文章的教程

    第一步:在文章表中加一个字段,用来保存定时发布的时间 假定我把这个字段设为 push_time 默认为 0 第二步:写一个方法来检查文章列表,把文章列表到时间的文章改为发布状态 //定时发布文章 pu ...

  3. Django models通过DateTimeField保存到MySQL的时间的时区问题

    最近开始使用Django开发一些系统,在models.py中设置一些数据库表结构并给日期时间字段赋初值,不过在使用的过程中,遇到一点问题.问题是,我本来服务器使用的市区是“Asia/Shanghai” ...

  4. java中加载xml文件方法

    this.getclass().getclassloader().getresourceasstream(String file); 可以加载文件,比如xml.

  5. iOS开发——OC篇&常用关键字的使用与区别

    copy,assign,strong,retain,weak,readonly,readwrite,nonatomic,atomic,unsafe_unretained的使用与区别 最近在学习iOS的 ...

  6. easyui tabs 真正刷新用法

    //刷新当前标签Tabs function RefreshTab(currentTab) { var url = $(currentTab.panel('options')).attr('href') ...

  7. Oracle除替换去掉换行符的方法

    特殊符号ascii定义 : 换行符和回车符都要干掉. 制表符 chr(9) 换行符 chr(10) 回车符 chr(13) select replace(replace(列名,CHR(10),''), ...

  8. ClipDrawable 资源

    ClipDrawable 代表从其他位图上截取的一个“图片片段”. 示例: main.xml <?xml version="1.0" encoding="utf-8 ...

  9. Go语言开发环境安装

    Go是Google开发的一种编译型,並發型,并具有垃圾回收功能的编程语言. 去http://golang.org/doc/install#download 下载相应的版本. 1.安装go语言:2.将g ...

  10. 关于索引degree设置的问题

    --并行查询 可以使用并行查询的情况 1. Full table scans, full partition scans, and fast full index scans 2. Index ful ...