SCC模板】的更多相关文章

vector<int> G[maxn]; int pre[maxn], low[maxn], c[maxn]; int n, m; stack<int> s; int dfstime, scc_cnt; void dfs(int u, int fa){ pre[u] = low[u] = ++dfstime; int len = G[u].size(); s.push(u); ; i < len; i++){ int v = G[u][i]; ){ dfs(v, u); lo…
1051: [HAOI2006]受欢迎的牛 Description 每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数(A,B),表示牛A认为牛B受欢迎. 这 种关系是具有传递性的,如果A认为B受欢迎,B认为C受欢迎,那么牛A也认为牛C受欢迎.你的任务是求出有多少头 牛被所有的牛认为是受欢迎的. Input 第一行两个数N,M. 接下来M行,每行两个数A,B,意思是A认为B是受欢迎的(给出的信息有可能重复,即有可 能出现多个A,B) Output 一个数,即有多少头牛被所有的牛认…
这显然是一道求强连通分量(SCC)的题目. 只要你正常,都知道应该写Tarjan. 然后(假装会写Tarjan),其实我当然不会.但是求SCC还有另一个算法.复杂度和Tarjan一样,只不过常数大了点而且不为人所知而已. 蓝书和挑战程序竞赛上都有这个算法,好像叫Kosaraju.是不是很拽的感觉. 具体的算法可以参照我的博客另一篇文章.重点是这道题就是SCC模板题(不敢相信竟然10分钟一次A了) CODE #include<cstdio> #include<vector> #inc…
#include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #include<algorithm> #include<queue> #include<cmath> #include<stack> using namespace std; #define Maxn 10010 #define Maxm 100010 struct…
代码如下 #include <bits/stdc++.h> using namespace std; const int maxv=1e4+10; const int maxe=1e5+10; inline int read(){ int x=0,f=1;char ch; do{ch=getchar();if(ch=='-')f=-1;}while(!isdigit(ch)); do{x=x*10+ch-'0';ch=getchar();}while(isdigit(ch)); return…
迷宫城堡 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 9893    Accepted Submission(s): 4433 Problem Description 为了训练小希的方向感,Gardon建立了一座大城堡,里面有N个房间(N<=10000)和M条通道(M<=100000),每一个通道都是单向的,就是说若称某通道连通了…
关于如何求强连通分量的知识请戳 https://www.byvoid.com/blog/scc-tarjan/ void DFS(int x) { dfn[x]=lowlink[x]=++dfn_clock; stac.push_back(x); ; i<g[x].size(); i++) //与x相连的个点 { int t=g[x][i]; if(!dfn[x]) //未访问过 { DFS(t); lowlink[x]=min(lowlink[x],lowlink[t]); } else if…
一.图论 1.单源最短路 洛谷P3371 (1)spfa 已加SLF优化 419ms #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> using namespace std; ,M=5e5+,INF=; inline int read(){ ,f=; ;c=getchar();} +c-';c=getchar();} return x*f; } int…
利用模板动态加载数据,其实是对上一节静态数据替换成动态数据:…
原题链接 \(2-SAT\)模板 #include<cstdio> using namespace std; const int N = 2e6 + 10; int fi[N], di[N], ne[N], dfn[N], low[N], st[N], bl[N], l, tp, ti, SCC; bool v[N]; inline int re() { int x = 0; char c = getchar(); bool p = 0; for (; c < '0' || c >…