【图论模板】图的连通分量
程序员文章站
2022-05-21 12:10:37
...
#include<cstdio>
#include<iostream>
#include<vector>
#include<stack>
using namespace std;
static const int MAX=100000;
static const int NIL=-1;
int n;
vector<int>G[MAX+1];
int color[MAX+1];
void dfs(int cur,int c)//搜索并进行染色
{
stack<int>S;
S.push(cur);
color[cur]=c;
while(!S.empty()){
int t=S.top();
S.pop();
for(int i=0;i<G[cur].size();i++){
int pt=G[cur][i];
if(color[pt]==NIL)//如果没有染色
{
S.push(pt);
color[pt]=c;
}
}
}
}
void assignColor(){
int col=1;
for(int i=0;i<n;i++)color[i]=NIL;//初始化颜色
for(int i=0;i<n;i++)
if(color[i]==NIL)dfs(i,col++);
}
int main(){
int s,t,m,q;
cin>>n>>m;
//存图(邻接表)
for(int i=0;i<m;i++){
cin>>s>>t;
G[s].push_back(t);
G[t].push_back(s);
}
assignColor();//染色
cin>>q;
for(int i=0;i<q;i++){
cin>>s>>t;
if(color[s]==color[t])
{
puts("Y");
}
else puts("N");
}
return 0;
}
/*
input:
10 9
0 1
0 2
3 4
5 7
5 6
6 7
6 8
7 8
8 9
3
0 1
5 9
1 3
*/
上一篇: SSLOJ 1247.A
下一篇: SSLOJ 1255.B
推荐阅读
-
图论小结(一)包括一些最短路,最小生成树,差分约束,欧拉回路,的经典题和变种题。强连通,双连通,割点割桥的应用。二分匹配
-
[HDU-1269] SCC tarjan求强连通分量模板题
-
ASP.NET Core 3.0 上的gRPC服务模板初体验(多图)
-
poj 1637 Sightseeing tour 混合图欧拉回路模板(不考虑不连通的情况)
-
无向图的强连通分量
-
[模板] scc/强连通分量
-
AcWing 1183. 电力(无向图的双连通分量)
-
AI怎么做饼状图?AI制作可编辑的漂亮饼图模板教程
-
Tarjan算法初探 (1):Tarjan如何求有向图的强连通分量
-
Python基于回溯法子集树模板实现图的遍历