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,但是不会啊...就想暴 ...
随机推荐
- 挑战全网最幽默的Vuex系列教程:第一讲 Vuex到底是什么鬼
先说两句 官方已经有教程了,为什么还要写这个教程呢?说实话,还真不是我闲着蛋疼,官方的教程真的是太官方了,对于刚入门 Vuex 的童鞋来说,想必看官方的教程,很多地方就如同看圣经一样,比如「欧玛尼玛尼 ...
- thymeleaf的特殊属性赋值
在用thymeleaf时,遇到特殊属性不知道该怎么解决如下: 问题1:循环时,遇到特殊的属性,不知道怎么赋值 如:cate-id="" ,fid=""; 使用t ...
- 通过Java HTTP连接将网络图片下载到本地
通过Java HTTP连接将网络图片下载到本地 只知道浏览器使用的是HTTP协议,那么如何将网络资源使用JavaHTTP下载下来呢! 这只是一个非常简单的小示例,只是不想每次碰到关于此方面的内容忘 ...
- Kubectl patch命令使用
kubectl patch 使用(patch)补丁修改.更新资源的字段. 支持JSON和YAML格式. 请参阅https://htmlpreview.github.io/?https://github ...
- Adaptert Listview 优化
这次是关于Listview的优化的,之前一直采用愚蠢的方式来使用listview,出现的情况就是数据多的话下拉的时候会出现卡顿的情况,内存占用多.所以学习了关于listview的优化,并且这也是普遍使 ...
- tensorflow2.x 报错 Could not load dynamic library 'cudart64_101.dll'
当我们使用 tensorflow 最新版本的时候 ,会出现这样的错误 -- ::] Could not load dynamic library 'cudart64_101.dll'; dlerror ...
- F - Make It Equal CodeForces - 1065C
题目大意:有n座塔,塔高h[i],每次给定高度H对他们进行削切,要求每次削掉的所有格子数不能超过k个,输出最少削几次才能使所有塔的高度相同. 思路一:差分+贪心 对于每一个高度h,用一个数组让1~h的 ...
- CSS属性中的display属性浅谈;
首先我们要知道什么是块级元素和行内元素有什么区别: 承接上篇文章:(浅谈HTML和body标签) 块级元素:浏览器解析为独占一行的元素(例如:div.table.ul等.),浏览器会在该元素的前后显示 ...
- C#开发BIMFACE系列31 服务端API之模型对比2:获取模型对比状态
系列目录 [已更新最新开发文章,点击查看详细] 在上一篇<C#开发BIMFACE系列30 服务端API之模型对比1:发起模型对比>中发起了2个模型对比,由于模型对比是在BIMFAC ...
- async 和 await 例子
/// <summary> /// C# 5.0 /// .net framework4.5 /// CLR4.0 /// 引入了async 和 await.这两个关键字可以让你更方便的写 ...