E. Reachability from the Capital dfs暴力
E. Reachability from the Capital
这个题目就是给你一个有向图,给你起点,问增加多少条边让这个图变成一个连通图。
这个因为n只有5000m只有5000
所以可以暴力枚举这个n,用n*n的复杂度过去。
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <queue>
#include <stack>
#include <bitset>
#include <vector>
#include <map>
#include <string>
#include <cstring>
#include <bitset>
using namespace std;
const int maxn=5e3+;
vector<int>G[maxn];
bool vis[maxn];
bool cnt[maxn];
int ans=;
void dfs(int u,int f){
ans++;
vis[u]=;
for(int i=;i<G[u].size();i++){
int v=G[u][i];
if(v==f||vis[v]) continue;
dfs(v,u);
}
} int num;
void DFS(int u,int f){
if(vis[u]) return ;
num++;
cnt[u]=;
for(int i=;i<G[u].size();i++){
int v=G[u][i];
if(v==f||vis[v]||cnt[v]) continue;
DFS(v,u);
}
}
vector<int>a;
int main(){
int n,m,s;
scanf("%d%d%d",&n,&m,&s);
for(int i=;i<=m;i++){
int u,v;
scanf("%d%d",&u,&v);
G[u].push_back(v);
}
dfs(s,-);
for(int i=;i<=n;i++){
if(!vis[i]) a.push_back(i);
}
int res=;
while(ans<n){
int maxs=,id=-;
for(int i=;i<a.size();i++){
memset(cnt,,sizeof(cnt));
num=;
int x=a[i];
DFS(x,-);
if(num>maxs) maxs=num,id=x;
}
if(id==-) break;
res++;
dfs(id,-);
}
printf("%d\n",res);
return ;
}
未优化
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <queue>
#include <stack>
#include <bitset>
#include <vector>
#include <map>
#include <string>
#include <cstring>
#include <bitset>
using namespace std;
const int maxn=5e3+;
vector<int>G[maxn];
bool vis[maxn];
bool cnt[maxn];
int ans=;
void dfs(int u,int f){
ans++;
vis[u]=;
for(int i=;i<G[u].size();i++){
int v=G[u][i];
if(v==f||vis[v]) continue;
dfs(v,u);
}
} int num;
void DFS(int u,int f){
if(vis[u]) return ;
num++;
cnt[u]=;
for(int i=;i<G[u].size();i++){
int v=G[u][i];
if(v==f||vis[v]||cnt[v]) continue;
DFS(v,u);
}
} void dfs2(int u,int f){
if(vis[u]) return ;
cnt[u]=;
for(int i=;i<G[u].size();i++){
int v=G[u][i];
if(v==f||vis[v]||cnt[v]==) continue;
dfs2(v,u);
}
} vector<int>a;
int main(){
int n,m,s;
scanf("%d%d%d",&n,&m,&s);
for(int i=;i<=m;i++){
int u,v;
scanf("%d%d",&u,&v);
G[u].push_back(v);
}
dfs(s,-);
for(int i=;i<=n;i++){
if(!vis[i]) a.push_back(i);
}
int res=;
while(ans<n){
int maxs=,id=-;
for(int i=;i<a.size();i++){
num=;
int x=a[i];
DFS(x,-);
dfs2(x,-);
if(num>maxs) maxs=num,id=x;
}
if(id==-) break;
res++;
dfs(id,-);
}
printf("%d\n",res);
return ;
}
dfs优化memset
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <queue>
#include <stack>
#include <bitset>
#include <vector>
#include <map>
#include <string>
#include <cstring>
#include <bitset>
using namespace std;
const int maxn=5e3+;
vector<int>G[maxn];
bool vis[maxn];
bool cnt[maxn];
int ans=;
void dfs(int u,int f){
ans++;
vis[u]=;
for(int i=;i<G[u].size();i++){
int v=G[u][i];
if(v==f||vis[v]) continue;
dfs(v,u);
}
} int num;
void DFS(int u,int f){
if(vis[u]) return ;
num++;
cnt[u]=;
for(int i=;i<G[u].size();i++){
int v=G[u][i];
if(v==f||vis[v]||cnt[v]) continue;
DFS(v,u);
}
} void dfs2(int u,int f){
if(vis[u]) return ;
cnt[u]=;
for(int i=;i<G[u].size();i++){
int v=G[u][i];
if(v==f||vis[v]||cnt[v]==) continue;
dfs2(v,u);
}
} vector<int>a;
int main(){
int n,m,s;
scanf("%d%d%d",&n,&m,&s);
for(int i=;i<=m;i++){
int u,v;
scanf("%d%d",&u,&v);
G[u].push_back(v);
}
dfs(s,-);
for(int i=;i<=n;i++){
if(!vis[i]) a.push_back(i);
}
int res=;
while(ans<n){
int maxs=,id=-;
for(int i=;i<a.size();i++){
num=;
int x=a[i];
DFS(x,-);
dfs2(x,-);
if(num>maxs) maxs=num,id=x;
}
if(id==-) break;
res++;
dfs(id,-);
}
printf("%d\n",res);
return ;
}
memset优化
E. Reachability from the Capital dfs暴力的更多相关文章
- ACM: FZU 2107 Hua Rong Dao - DFS - 暴力
FZU 2107 Hua Rong Dao Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I6 ...
- ACM: Gym 100935G Board Game - DFS暴力搜索
Board Game Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Gym 100 ...
- hdu 5612 Baby Ming and Matrix games(dfs暴力)
Problem Description These few days, Baby Ming is addicted to playing a matrix game. Given a n∗m matr ...
- hdu 1010 Tempter of the Bone(dfs暴力)
Problem Description The doggie found a bone in an ancient maze, which fascinated him a lot. However, ...
- E - Reachability from the Capital
E - Reachability from the Capital CodeForces - 999E 题目链接:https://vjudge.net/contest/236513#problem/ ...
- NOIP 2002提高组 选数 dfs/暴力
1008 选数 2002年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 已知 n 个整数 x1,x2,…, ...
- E. Reachability from the Capital(tarjan+dfs)
求联通分量个数,在dfs一次 #include <iostream> #include <algorithm> #include <cstring> #includ ...
- Codeforces Round #313 (Div. 1) B. Equivalent Strings DFS暴力
B. Equivalent Strings Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/559 ...
- UVaLive 6625 Diagrams & Tableaux (状压DP 或者 DFS暴力)
题意:给一个的格子图,有 n 行单元格,每行有a[i]个格子,要求往格子中填1~m的数字,要求每个数字大于等于左边的数字,大于上边的数字,问有多少种填充方法. 析:感觉像个DP,但是不会啊...就想暴 ...
随机推荐
- 查看jdk 线程 日志
命令:jstack(查看线程).jmap(查看内存)和jstat(性能分析)命令 这些命令 必须 在 linux jdk bin 路径 下执行 eq: ./jstack 10303 即可 如果想把 ...
- 小小的锁,大大的疑问?Lock疑问?
Lock锁 怎么使用?怎么把下面的这个锁弄得比较合适,大家都能去买票?? 和synchronized相比的好处? lock的使用规范try finnally private final Reentra ...
- AJ学IOS(45)之常用的小功能比如打电话、打开网址、发邮件、发短信打开其他应用。
AJ分享,必须精品 简介 iOS中的很多小功能都是非常简单的,几行代码就搞定了,比如打电话.打开网址.发邮件.发短信.打开其他应用等. 打电话 方法1 最简单最直接的方式:直接跳到拨号界面 NSURL ...
- 把川普射上太阳—如何用python制作小游戏
1.准备 开始之前,你要确保Python和pip已经成功安装在电脑上噢,如果没有,请访问这篇文章:超详细Python安装指南 进行安装. Windows环境下打开Cmd(开始—运行—CMD),苹果系统 ...
- 告诉你那里最受欢迎,python爬取全国13个城市旅游数据
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取http ...
- mybatis源码配置文件解析之二:解析settings标签
在前边的博客中分析了mybatis解析properties标签,<mybatis源码配置文件解析之一:解析properties标签>.下面来看解析settings标签的过程. 一.概述 在 ...
- 详解 final 和 static
在我们上一篇博文中提到了 fianl 这个关键字,对于这个关键字,本人在初学时也耗费了极大地心血,甚至和师兄进行了激烈的讨论,并且,在我们讨论.尝试 以及 翻阅各种资料,最终得出了合适.易懂的解释. ...
- 常见web漏洞的整理之SQL注入
SQL注入: 简介: 全称Structured Query Language,即结构化查询语言,是一种特殊的编程语言,用于数据库中的标准数据查询语言.也被作为关系式数据库管理系统的标准语言. 原理: ...
- 散列表和JAVA中的hash
引文 hello,今天写的数据结构是散列表(hash表),也算是一种基础数据结构了吧.学过计算机的人大概都能说出来这是个以空间换时间的东西,那么具体怎么实现的是今天要讨论的问题. 为什么需要它?主要还 ...
- s3cmd s3命令行工具
Amazon S3 Tools: Command Line S3 Client Software and S3 Backup 官方网站