P8604 [蓝桥杯 2013 国 C] 危险系数

题目背景

抗日战争时期,冀中平原的地道战曾发挥重要作用。

题目描述

地道的多个站点间有通道连接,形成了庞大的网络。但也有隐患,当敌人发现了某个站点后,其它站点间可能因此会失去联系。

我们来定义一个危险系数 DF(x,y):

对于两个站点 x 和 y(x≠y), 如果能找到一个站点 z,当 z 被敌人破坏后,x 和 y 不连通,那么我们称 z 为关于 x,y 的关键点。相应的,对于任意一对站点 x 和 y,危险系数 DF(x,y) 就表示为这两点之间的关键点个数。

本题的任务是:已知网络结构,求两站点之间的危险系数。

输入格式

输入数据第一行包含 2 个整数 n(2≤n≤1000),m(0≤m≤2000),分别代表站点数,通道数。

接下来 m 行,每行两个整数 u,v(1≤u,v≤n,u≠v) 代表一条通道。

最后 1 行,两个数 u,v,代表询问两点之间的危险系数 DF(u,v)。

输出格式

一个整数,如果询问的两点不连通则输出−1。

输入样例

7 6
1 3
2 3
3 4
3 5
4 5
5 6
1 6

输出样例

2

解答代码

#include <bits/stdc++.h>using namespace std;
int n,m;
bool vis[10001];
vector<int>G[10001];
int st, ed,total=0;
int cnt[10001]={0};
void dfs(int now)
{if(now==ed){total++;for(int i=1;i<=n;i++){if(vis[i]){cnt[i]++;}}return;}for(int i=0;i<G[now].size();i++){int to=G[now][i];if(!vis[to]){vis[to]=true;dfs(to);vis[to]=false;}}return;
}
int main()
{cin>>n>>m;for(int i=1;i<=m;i++){int x,y;cin>>x>>y;G[x].push_back(y);G[y].push_back(x);}cin>>st>>ed;vis[st]=true;dfs(st);int ans=0;for(int i=1;i<=n;i++){if(cnt[i]==total){ans++;}}ans-=2;cout<<ans;
}

思路

采用dfs搜索从st到ed的所有路径,记录总数total,经过的点i记录经过的次数cnt[i],如果存在一个点经过的次数cnt[i]等于路径总数total,则该点为关键点。

P3916 图的遍历

题目描述

给出 N 个点,M 条边的有向图,对于每个点 v,求 A(v) 表示从点 v 出发,能到达的编号最大的点。

输入格式

第 1 行 22 个整数 N,M,表示点数和边数。

接下来 M 行,每行 2 个整数 Ui​,Vi​,表示边 (Ui​,Vi​)。点用 1,2,…,N 编号。

输出格式

一行 N 个整数 A(1),A(2),…,A(N)。

输入样例

4 3
1 2
2 4
4 3

输出样例

4 4 3 4

解答代码

#include <bits/stdc++.h>using namespace std;
int n,m;
int vis[100001];
vector<int>G[100001];
int max;
int cnt[10001]={0};
void dfs(int now,int x)
{if(vis[now]){return;}vis[now]=x;for(int i=0;i<G[now].size();i++){dfs(G[now][i],x);}return;
}
int main()
{cin>>n>>m;for(int i=1;i<=m;i++){int x,y;cin>>x>>y;G[y].push_back(x);}for(int i=n;i>=1;i--){dfs(i,i);}for(int i=1;i<=n;i++){cout<<vis[i]<<" ";}
}

思路

因为是有向图,所以不能两个数都push_back。因为只要找到能到达的最大的点,所以可以反向建边, 同时dfs的顺序从大到小,可以使路过的点的vis都赋最大的,如果已经赋过值,就说明已经找到过最大值,所以函数里就直接return,防止找到的最大值被较小值覆盖。

P1330 封锁阳光大学

题目描述

曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街。河蟹看到欢快的曹,感到不爽。河蟹决定封锁阳光大学,不让曹刷街。

阳光大学的校园是一张由 n 个点构成的无向图,n 个点之间由 m 条道路连接。每只河蟹可以对一个点进行封锁,当某个点被封锁后,与这个点相连的道路就被封锁了,曹就无法在这些道路上刷街了。非常悲剧的一点是,河蟹是一种不和谐的生物,当两只河蟹封锁了相邻的两个点时,他们会发生冲突。

询问:最少需要多少只河蟹,可以封锁所有道路并且不发生冲突。

输入格式

第一行两个正整数,表示节点数和边数。 接下来 m 行,每行两个整数 u,v,表示点 u 到点 v 之间有道路相连。

输出格式

仅一行如果河蟹无法封锁所有道路,则输出 Impossible,否则输出一个整数,表示最少需要多少只河蟹。

输入样例#1

3 3
1 2
1 3
2 3

输出样例#1

Impossible

输入样例#2

3 2
1 2
2 3

输出样例#2

1

说明/提示

【数据规模】
对于 100% 的数据,1≤n≤10^4,1≤m≤10^5,保证没有重边。

解答代码

#include<bits/stdc++.h>using namespace std;
vector <int>a[10001];
bool vis[10001];
int sum[2];
int color[10001]={0};
struct Edge
{int t;int nexty;
}edge[100001];
int head[100001];
int cnt=0;
void add(int a,int b)
{cnt++;edge[cnt].t=b;edge[cnt].nexty=head[a];head[a]=cnt;
}bool dfs(int x,int c)
{if(vis[x]){if(color[x]==c) return true;return false;}vis[x]=true;color[x]=c;sum[color[x]]++;bool flag=true;int i=head[x];while(i!=0&&flag){flag=flag&&dfs(edge[i].t,1-c);i=edge[i].nexty;}return flag;
}
int main()
{int n,m;cin>>n>>m;for(int i=1;i<=m;i++){int x,y;cin>>x>>y;add(x,y);add(y,x);}int ans=0;for(int i=1;i<=n;i++){if(vis[i]){continue;}sum[0]=0;sum[1]=0;if(!dfs(i,0)){cout<<"Impossible";return 0;}ans+=min(sum[0],sum[1]);}cout<<ans;
}

思路

这题有点难,一开始没什么思路,就参考了下题解,知道了可以将这道题看成是染色问题,由两种颜色,用color的数组下标0和1表示,color数组记录每种颜色出现的次数,然后答案取两种颜色个数的最小值。

中间填色的过程,用dfs,下次调用dfs时要换种颜色,故输入的第二个值是1-c。

当dfs遇到已经走过的地方,比较两次要填入的颜色,如果不同则说明相同颜色相邻了,就返回false,即输出Impossible,如果相同则说明可以完成题意,输出两种颜色个数的较小值。

NEUQ ACM预备队训练-week5(图的基础存图和dfs)相关推荐

  1. 图神经网络基础--基于图神经网络的节点表征学习

    图神经网络基础–基于图神经网络的节点表征学习 引言 在图节点预测或边预测任务中,首先需要生成节点表征(Node Representation).我们使用图神经网络来生成节点表征,并通过基于监督学习的对 ...

  2. NEUQ-acm 预备队训练Week5—图论

    本周基于BFS/DFS进一步练习,涉及连通图知识 P8604 [蓝桥杯 2013 国 C] 危险系数 题目背景 抗日战争时期,冀中平原的地道战曾发挥重要作用. 题目描述 地道的多个站点间有通道连接,形 ...

  3. 【阿里云课程】图神经网络基础:图的应用、表示与图卷积

    大家好,继续更新有三AI与阿里天池联合推出的深度学习系列课程,本次更新内容为第9课中的一节,介绍如下: 图神经网络基础 本次课程是阿里天池联合有三AI推出的深度学习系列课程第9期,讲述图神经网络,图的 ...

  4. ACM图论之存图方式

    <转--剑紫青天> 对于ACM图论方面的题目总是免不了首先要建图存图,使用合适的存图方式不但是AC的必要条件,解题事半功倍. 以下主要分析三种常见的存图方式的优缺点以及代码实现 邻接矩阵 ...

  5. 【UML 建模】UML建模语言入门 -- 静态图详解 类图 对象图 包图 静态图建模实战

    发现个好东西思维导图, 最近开始用MindManager整理博客 . 作者 :万境绝尘  转载请注明出处 : http://blog.csdn.net/shulianghan/article/deta ...

  6. 【恋上数据结构】图代码实现、BFS、DFS、拓扑排序

    图代码实现 图的基础代码 顶点Vertex 边Edge 添加边addEdge 删除边removeEdge 删除点removeVertex 完整源码 图的遍历 广度优先搜索(Breadth First ...

  7. 海康工业相机LabVIEW二次开发——修改参数、存图

    最近使用LabVIEW对海康机器人的工业相机进行二次开发,没有专门介绍LabVIEW的开发手册,本文就简单的写一写单相机取图显示以及存图的开发步骤. 如果各位是直接使用IMAQdx开发的,可以直接下载 ...

  8. 海康工业相机连续存图、录像功能介绍

    海康工业相机连续存图功能介绍 1.MVS连续存图功能基本使用方法 2.抓图测试与实际问题分析 总结 3. SDK代码开发关键接口介绍 在使用工业相机做日常的数据采集,分析过程中,存图.录像功能必不可少 ...

  9. 【赠书】图神经网络基础与前沿最新书籍,赠5本学习

    假期快要到了,本次给大家赠送5本人工智能领域的技术书籍,这次赠送的书籍是<图神经网络基础与前沿>. 这是一本什么样的书 图神经网络是近两年学术界的热点,在顶级会议上的文章越来越多.目前图像 ...

最新文章

  1. Datawhale来厦大啦!
  2. 深入解剖unsigned int 和 int
  3. [Spring cloud 一步步实现广告系统] 13. 索引服务编码实现
  4. 那些年,我们踩过的 Java 坑
  5. How is data replicted from HANA to AS
  6. 教你如何创建一款属于自己的VSCode主题
  7. 【Go】panic: reflect: call of reflect.Value.FieldByName on ptr Value
  8. python3 web服务器_python3 简单web服务器
  9. plsql developer 安装在win7 64位电脑路径问题
  10. 社区团购会一直走下去吗?
  11. ygbook和ptcms哪个好_长期更新,国内所有小说建站系统整理
  12. 惠普m128fn中文说明书_惠普M128fw使用说明书
  13. java计算ipv6前缀位数
  14. R语言差异检验:非参数检验
  15. ps设计精讲精练笔记
  16. 个人微信低成本引流实战教程方法
  17. 微信小程序云开发云数据库_聚合操作_联表查询_对象数组某字段与另一集合的某字段相等匹配
  18. 【MySQL】navicat for mysql 安装及使用
  19. cad应用技巧:图层特性管理器
  20. 共模扼流圈的工作原理与作用以及特点和应用详解

热门文章

  1. 面试常问集锦——Java基础部分
  2. 最喜欢的科技资讯类英文网站
  3. macOS python3.10出现findfont: Font family [‘sans-serif‘] not found报错的解决方法。
  4. 今日参与会议后的感悟
  5. TIA博途软件中程序编辑区标题上的收藏快捷指令取消了,如何恢复显示?
  6. “损失函数”是如何设计出来的?直观理解“最小二乘法”和“极大似然估计法”
  7. strassen矩阵乘法 java_矩阵乘法Strassen算法
  8. Vue data 中随意更改一个属性,视图都会被更新吗?
  9. 送你个低代码福利,错过要再等一年
  10. 5G DL PRS(Positioning Reference Signal) -- 下行定位参考信号