正题


题目大意

有nnn个点mmm条边,若一个点没选,那么连接到的点都得选择。求最小选择权值。


解题思路

对于每个联通块暴力dfsdfsdfs,若一个点不选那么就把别的点都选上。

因为每个点至少限制一个点,那么时间复杂度最坏为O(2n2)O(2^{\frac{n}{2}})O(22n​)(也就是一条链的情况)。


codecodecode

#include<cstdio>
#include<algorithm>
using namespace std;
const int N=60;
int tot,in[N],ans,w[N],flag[N],n,maxs,m,ls[N];
bool v[N],zh[N];
struct node{int to,next;
}a[N*20];
void addl(int x,int y)
{a[++tot].to=y;a[tot].next=ls[x];ls[x]=tot;
}
void dfs(int x)
{in[++tot]=x;v[x]=1;for(int i=ls[x];i;i=a[i].next)if(!v[a[i].to])dfs(a[i].to);
}
void get_ans(int dep,int z)
{if(z>maxs) return;if(dep>tot){maxs=min(maxs,z);return;}get_ans(dep+1,z+w[in[dep]]);if(!flag[in[dep]]&&!zh[in[dep]]){for(int i=ls[in[dep]];i;i=a[i].next)flag[a[i].to]++;get_ans(dep+1,z);for(int i=ls[in[dep]];i;i=a[i].next)flag[a[i].to]--;}
}
int main()
{//freopen("graph.in","r",stdin);//freopen("graph.out","w",stdout);scanf("%d%d",&n,&m);for(int i=1;i<=n;i++)scanf("%d",&w[i]);for(int i=1;i<=m;i++){int x,y;scanf("%d%d",&x,&y);addl(x,y);addl(y,x);if(x==y) zh[x]=1;}for(int i=1;i<=n;i++){maxs=2147483647;tot=0; if(v[i]) continue;dfs(i);get_ans(1,0);ans+=maxs;}printf("%d",ans);
}

jzoj4252-QYQ的图【dfs】相关推荐

  1. 链式前向星模板 建图+dfs+bfs+dijkstra

    边没有用struct封装起来,节点和边的计数起点如果不符合习惯可以稍作修改 建图+DFS+BFS #include <cstdio> #include <cstring> #i ...

  2. 图的遍历(C语言,邻接表存储的图 - DFS,邻接矩阵存储的图 - BFS)

    邻接表存储的图 - DFS /* 邻接表存储的图 - DFS */void Visit( Vertex V ) {printf("正在访问顶点%d\n", V); }/* Visi ...

  3. 【五校联考7day2】QYQ的图

    Description 给你一个n个点,m条边的无向图,每个点有一个非负的权值ci,现在你需要选择一些点,使得每一个点都满足: 如果这个点没有被选择,则与它有边相连的所有点都必须被选择. 问:满足上述 ...

  4. hdu 1044 BFS(压缩图)+DFS

    题意:              给你起点,终点,图上有墙有路还有宝物,问你在规定时间内能否能到终点,如果能问最多能捡到多少宝物. 思路:           看完这个题目果断 BFS+三维的mark ...

  5. vector邻接表建图+DFS+BFS

    以边操作为主的图用边集数组存储比较好,相比链式前向星,vector建图更容易懂. #include <iostream> #include <cstdio> #include ...

  6. [Leetcode][第133题][JAVA][克隆图][DFS][BFS][深拷贝]

    [问题描述][中等] [解答思路] 其实就是深拷贝的一个实现,深拷贝就是对于所有的指针成员,不能仅仅是赋值,还有重新分配空间. 深拷贝反应在本题中就是,所有的结点需要重新new出来,而不是直接赋值. ...

  7. 算法系列之图--DFS

    深度优先搜索使用的策略是,只要与可能就在图中尽量"深入".DFS总是对最近才发现的结点v出发边进行探索,知道该结点的所有出发边都被发现为止.一旦v的所有出发边都被发现了,搜索就回溯 ...

  8. PTA 5-10 Saving James Bond-Easy (25) - 图 - DFS

    题目:http://pta.patest.cn/pta/test/16/exam/4/question/672 PTA - Data Structures and Algorithms (Englis ...

  9. 邻接矩阵/图/DFS/BFS

    目录 1.邻接矩阵的表示 2.邻接矩阵的存储 3.采用邻接矩阵表示法创建无向网 4.基于邻接矩阵的图上各类操作 5.DFS 6.BFS 7.测试程序(待完成) 权与网 连通分量(强连通分量) 1.邻接 ...

  10. 邻接表/图/DFS/BFS

    目录 存储形式 采用邻接表法创建无向网 邻接表的特点 邻接矩阵与邻接表表示法的关系 完整代码 存储形式 顶点的结构 typedef struct VNode {VerTexType data; //顶 ...

最新文章

  1. 再发布一个windows live writer 插件 图标信息框 wlw plugin icon info frame
  2. 引用与传递——内存分析
  3. Hadoop 学习笔记 (十一) MapReduce 求平均成绩
  4. 5G RRC——为NAS层提供连接管理,消息传递等服务; 对接入网的底层协议实体提供参数配置的功能; 负责UE移动性管理相关的测量、控制等功能...
  5. 项目上线,php的错误信息必须不让其在页面中显示给客户,
  6. MessagePack:一种高效二进制序列化格式
  7. Multi-Range Read (MRR)原理
  8. 几种常见SQL分页方式效率比较
  9. excel中线性函数_Excel中特别有用的不常用函数之Indirect函数
  10. NTA告警引发的dll劫持思考(溯源)
  11. 我来了,我看见了,我征服了
  12. Fiddler抓包详解
  13. JAVA发送邮件案例
  14. 坚果投影仪怎么才能访问电脑共享文件,详细的操作方法分享
  15. js正则表达式匹配纯中文或纯英文
  16. 交通一卡通二维码支付技术要求
  17. U-Boot中支持USB
  18. 设置卡巴斯基2010升级服务器,防止拉入黑名单
  19. AJAX技术(第一篇博客)
  20. Games101结合Unity Shader入门精要学习笔记(个人向)

热门文章

  1. 计算机数控是什么专业,数控是什么专业
  2. akka linux 端口,Actor模型开发库 Akka
  3. gather torch_浅谈Pytorch中的torch.gather函数的含义
  4. Linux中 安装centos-release-scl 报错No package centos-release-scl available.
  5. C++与C语言中有关数组中元素排序
  6. pip 设置超时时间_Python pip使用超时问题解决方案
  7. [SpringSecurity]web权限方案_用户授权_自定义403页面
  8. [C++STL]stack容器用法介绍
  9. 根据后序和中序求二叉树的层序
  10. linux apt-get 安装 根目录,技术|apt-get 和 apt-cache 命令实例展示