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,但是不会啊...就想暴 ...
随机推荐
- Erlang语言之简述及安装
1. 简述 Erlang在1991年由爱立信公司向用户推出了第一个版本,经过不断的改进完善和发展,在1996年爱立信又为所有的Erlang用户提供了一个非常实用且稳定的OTP软件库并在1998年发布了 ...
- .Net Core结合AspNetCoreRateLimit实现限流
前言 相信使用过WebApiThrottle的童鞋对AspNetCoreRateLimit应该不陌生,AspNetCoreRateLimit是一个ASP.NET Core速率限制的解决方案,旨在控制客 ...
- 绕过XSS过滤姿势总结
0x01 弹窗关键字检测绕过 基本WAF都针对常用的弹窗函数做了拦截,如alert().prompt().confirm(),另外还有代码执行函数eval(),想要绕过去也比较简单,我们以alert( ...
- Linux下安装python3环境搭建
Linux下python3环境搭建 Linux安装软件有哪些方式? rpm软件包 手动安装 拒绝此方式 需要手动解决依赖关系 yum自动化安装 自动处理依赖关系 非常好用 源代码编译安装,可自定义的功 ...
- vue2.x学习笔记(四)
接着前面的内容:https://www.cnblogs.com/yanggb/p/12563162.html. 模板语法 vue使用了基于html的模板语法,允许开发者声明式地将dom绑定到底层vue ...
- weblogic漏洞(一)----CVE-2017-10271
WebLogic XMLDecoder反序列化漏洞(CVE-2017-10271) 0x01 漏洞原因: Weblogic的WLS Security组件对外提供webservice服务,其中使用了XM ...
- 从一次“并发修改字段业务”引出多版本并发控制与InnoDB锁
并发字段修改业务 最近在主要在做"工作流引擎"课题的预研工作,在涉及到"会签任务"(工作流业务概念,这与我们今天讨论文问题没有太多关联)的时候,遇到了一个并发修 ...
- 关于赋值的Java面试题
面试题:(1) short s = 1:s = s + 1;(2) short s = 1;s += 1;问:上面两个代码有没有问题,如果有,哪里有问题? 答:(1) 第一个是错的,会报错损失精度,因 ...
- 使用 Python 控制自己的电脑和键盘是一种什么样的体验?python学习的正确姿势
可能有时候你需要在电脑做一些重复的点击或者提交表单等操作,如果能通过 Python 预先写好相关的操作指令,让它帮你操作,然后你自己爱干嘛干嘛去,有点 “按键精灵” 的意思,是不是感觉有点爽呢? 那么 ...
- Python玩转人工智能最火框架 TensorFlow应用实践 学习 教程
随着 TensorFlow 在研究及产品中的应用日益广泛,很多开发者及研究者都希望能深入学习这一深度学习框架.而在昨天机器之心发起的框架投票中,2144 位参与者中有 1441 位都在使用 Tenso ...