AT3945-[ARC092D]Two Faced Edges【dfs】
正题
题目链接:https://www.luogu.com.cn/problem/AT3945
题目大意
nnn个点mmm条边的一张图,对于每条边求它翻转后强连通分量数量是否变化。
1≤n≤1000,1≤m≤2×1051\leq n\leq 1000,1\leq m\leq 2\times 10^51≤n≤1000,1≤m≤2×105
解题思路
对于一条(x,y)(x,y)(x,y)的边。
- 如果原来yyy能走到xxx,那么考虑现在是否强连通分量是否减少,就是说如果存在一条x−>yx->yx−>y的路径不经过这条边那么不变,否则减少。
- 如果原来yyy不能走到xxx,那么考虑现在强连通分量是否增加,那么如果存在一条x−>yx->yx−>y的路径不经过这条边那么就会产生一个新的强连通分量。
考虑每一个xxx能否走到yyy,这个直接暴力O(nm)O(nm)O(nm)预处理就好了。
然后考虑对于每条边x,yx,yx,y,xxx能否不经过这条边走到yyy,从xxx开始dfsdfsdfs,记录出去的第一条边,然后如果到一个点有两种不同情况那么标记即可。
时间复杂度O(nm)O(nm)O(nm)
code
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
const int N=1e3+10,M=2e5+10;
int n,m,f[N][N],g[N][N],X[M],Y[M];
vector<int> a[N];
void step(int x,int *v){if(v[x])return;v[x]=1;for(int i=0;i<a[x].size();i++)step(a[x][i],v);
}
void calc(int x,int *v){if(v[x]==1)return;v[x]=1;for(int i=0;i<a[x].size();i++)calc(a[x][i],v);return;
}
void dfs(int x,int *v,int pos){if(v[x]>0)return;else if(v[x]<0){if((-v[x])==pos)return;else v[x]=1;}else if(!v[x])v[x]=-pos;for(int i=0;i<a[x].size();i++)if(v[x]==1)calc(a[x][i],v);else dfs(a[x][i],v,pos);return;
}
int main()
{scanf("%d%d",&n,&m);for(int i=1;i<=m;i++){int x,y;scanf("%d%d",&x,&y);a[x].push_back(y);X[i]=x;Y[i]=y;}for(int i=1;i<=n;i++)step(i,f[i]);for(int x=1;x<=n;x++){g[x][x]=1;for(int i=0;i<a[x].size();i++)dfs(a[x][i],g[x],i+1);}for(int i=1;i<=m;i++){if(f[Y[i]][X[i]]){if(g[X[i]][Y[i]]==1)puts("same");else puts("diff");}else{if(g[X[i]][Y[i]]==1)puts("diff");else puts("same");}}return 0;
}
AT3945-[ARC092D]Two Faced Edges【dfs】相关推荐
- Bailian2815 城堡问题【DFS】
2815:城堡问题 总时间限制: 1000ms 内存限制: 65536kB 描述 1 2 3 4 5 6 7 ############################# 1 # | # | # | | ...
- Bailian2816 红与黑【DFS】
2816:红与黑 总时间限制: 1000ms 内存限制: 65536kB 描述 有一间长方形的房子,地上铺了红色.黑色两种颜色的正方形瓷砖.你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动.请写一 ...
- NUC1158 Lake Counting【DFS】
Lake Counting 时间限制: 1000ms 内存限制: 65536KB 通过次数: 1总提交次数: 1 问题描述 Due to recent rains, water has pooled ...
- NUC1399 Sum It Up【DFS】
Sum It Up 时间限制: 1000ms 内存限制: 65535KB 通过次数: 1总提交次数: 1 问题描述 Given a specified total t and a list of n ...
- [ARC092D] Two Faced Edges
[ARC092D] Two Faced Edges 考虑强联通分量的本质,即其中任意两点 u , v u,v u,v 都有一条 u → v u\to v u→v 的路径,同时也有一条 v → u v\ ...
- HDU1181 变形课【DFS】(废除)
新题解参见:HDU1181 变形课[DFS+关系闭包+bitset] 变形课 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 13107 ...
- 【DFS】巧妙取量的倒油问题
题目描述 [题目描述] 有三个容器,容量分别为 a,b,c(a> b > c ),一开始a装满油,现在问是否只靠abc三个容器量出k升油.如果能就输出"yes",并且 ...
- [kuangbin]专题三 Dancing Links Squiggly Sudoku HDU - 4069【DFS】【精确覆盖】
[题目描述] Today we play a squiggly sudoku, The objective is to fill a 9*9 grid with digits so that each ...
- 【DFS】不撞南墙不回头—深度优先搜索算法[Deep First Search]
今天上午听到,那个非常6+1的李咏先生因癌症去世 DFS算法的基本模型 深度下,不撞南墙不回头,就是一直往后找,知道没有路了,向后返回. 想起一首民谣,<可能否>--木小雅 https:/ ...
最新文章
- linux sqlplus 密码有$
- kubernetes入门mysql_Kubernetes 1.13 完全入门 (10) Mysql 数据例子
- mysql迁移之后读取速度变慢_如何解决数据库迁移之后变慢的问题
- linux系统如何查看是否是线程死锁,多线程中如何使用gdb精确定位死锁问题
- mysql5.7.25my.ini_mysql5.7 没有my.ini 的解决办法
- 编程语言“铁三角”,JavaScript 力压 Java和Python
- Cacti添加IO模板并监控磁盘IO
- tomcat 7 无法打开管理页面
- 实现multbandblend
- 深度学习笔记其一:基础知识和PYTORCH
- sas 安装后处理出错
- 08cms中error_08cms_licens 故障
- 教育培训机构小程序开发需求有哪些?
- 60万餐厅数据为你画出全国美食地图(附技术讲解)
- 计算机启动黑屏一段时间,电脑开机为什么黑屏一段时间就好了
- java 数组形式字符串_java 数组格式字符串转化为字符串
- 【C语言】分类统计字符个数(多行输入字符串)
- 2021/8/12 网络机顶盒
- 线性代数和微积分 1.1微分方程概述
- [pandas] DataFrame 取指定列为某些值的行
热门文章
- linux运维趋势 37期刊为啥没有,linux运维常见问题
- Java开发和嵌入式开发该如何选择
- java基础变量_Java基础语法之变量和常量
- linux实验目的能学会什么意思,Linux实验.doc
- java换水_java-交流灌水之谁是水王?
- [C++11]统一的数据初始化方式 - 初始化列表
- [PAT乙级]1023 组个最小数
- 《C++ Primer》8.1.2节练习
- 山东省中职信息技术c语言试题及答案,中职计算机专业C语言测试题
- 机器学习朴素贝叶斯算法+tkinter库界面实现好瓜坏西瓜分类