正题

题目链接: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】相关推荐

  1. Bailian2815 城堡问题【DFS】

    2815:城堡问题 总时间限制: 1000ms 内存限制: 65536kB 描述 1 2 3 4 5 6 7 ############################# 1 # | # | # | | ...

  2. Bailian2816 红与黑【DFS】

    2816:红与黑 总时间限制: 1000ms 内存限制: 65536kB 描述 有一间长方形的房子,地上铺了红色.黑色两种颜色的正方形瓷砖.你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动.请写一 ...

  3. NUC1158 Lake Counting【DFS】

    Lake Counting 时间限制: 1000ms 内存限制: 65536KB 通过次数: 1总提交次数: 1 问题描述 Due to recent rains, water has pooled ...

  4. NUC1399 Sum It Up【DFS】

    Sum It Up 时间限制: 1000ms 内存限制: 65535KB 通过次数: 1总提交次数: 1 问题描述 Given a specified total t and a list of n ...

  5. [ARC092D] Two Faced Edges

    [ARC092D] Two Faced Edges 考虑强联通分量的本质,即其中任意两点 u , v u,v u,v 都有一条 u → v u\to v u→v 的路径,同时也有一条 v → u v\ ...

  6. HDU1181 变形课【DFS】(废除)

    新题解参见:HDU1181 变形课[DFS+关系闭包+bitset] 变形课 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 13107 ...

  7. 【DFS】巧妙取量的倒油问题

    题目描述 [题目描述]  有三个容器,容量分别为 a,b,c(a> b > c ),一开始a装满油,现在问是否只靠abc三个容器量出k升油.如果能就输出"yes",并且 ...

  8. [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 ...

  9. 【DFS】不撞南墙不回头—深度优先搜索算法[Deep First Search]

    今天上午听到,那个非常6+1的李咏先生因癌症去世 DFS算法的基本模型 深度下,不撞南墙不回头,就是一直往后找,知道没有路了,向后返回. 想起一首民谣,<可能否>--木小雅 https:/ ...

最新文章

  1. linux sqlplus 密码有$
  2. kubernetes入门mysql_Kubernetes 1.13 完全入门 (10) Mysql 数据例子
  3. mysql迁移之后读取速度变慢_如何解决数据库迁移之后变慢的问题
  4. linux系统如何查看是否是线程死锁,多线程中如何使用gdb精确定位死锁问题
  5. mysql5.7.25my.ini_mysql5.7 没有my.ini 的解决办法
  6. 编程语言“铁三角”,JavaScript 力压 Java和Python
  7. Cacti添加IO模板并监控磁盘IO
  8. tomcat 7 无法打开管理页面
  9. 实现multbandblend
  10. 深度学习笔记其一:基础知识和PYTORCH
  11. sas 安装后处理出错
  12. 08cms中error_08cms_licens 故障
  13. 教育培训机构小程序开发需求有哪些?
  14. 60万餐厅数据为你画出全国美食地图(附技术讲解)
  15. 计算机启动黑屏一段时间,电脑开机为什么黑屏一段时间就好了
  16. java 数组形式字符串_java 数组格式字符串转化为字符串
  17. 【C语言】分类统计字符个数(多行输入字符串)
  18. 2021/8/12 网络机顶盒
  19. 线性代数和微积分 1.1微分方程概述
  20. [pandas] DataFrame 取指定列为某些值的行

热门文章

  1. linux运维趋势 37期刊为啥没有,linux运维常见问题
  2. Java开发和嵌入式开发该如何选择
  3. java基础变量_Java基础语法之变量和常量
  4. linux实验目的能学会什么意思,Linux实验.doc
  5. java换水_java-交流灌水之谁是水王?
  6. [C++11]统一的数据初始化方式 - 初始化列表
  7. [PAT乙级]1023 组个最小数
  8. 《C++ Primer》8.1.2节练习
  9. 山东省中职信息技术c语言试题及答案,中职计算机专业C语言测试题
  10. 机器学习朴素贝叶斯算法+tkinter库界面实现好瓜坏西瓜分类