-
个人简介
《季姬击鸡记》
赵元任
季姬寂,集鸡,鸡即棘鸡。棘鸡饥叽,季姬及箕稷济鸡。鸡既济,跻姬笈,季姬忌,急咭鸡,鸡急,继圾几,季姬急,即籍箕击鸡,箕疾击几伎,伎即齑,鸡叽集几基,季姬急极屐击鸡,鸡既殛,季姬激,即记《季姬击鸡记》
$$\Huge TYSC=TYSC+\sum_{i=2023}^{\infty}{me} $$
我的洛谷账号: 张晋嘉
我的oiclass(普及)账号: 张晋嘉
我的oiclass(入门)账号: 张晋嘉
燕子去了,关我什么事;杨柳枯了,关我什么事;桃花谢了,关我什么事。
强连通分量
int d[10005],l[10005],ans,n,m,x,y,c,s[10005],a[10005],sum; vector<int> g[10005]; bool visit[10005]; stack<int> s1; void tarjan(int u){ d[u]=l[u]=++ans; s1.push(u); visit[u]=true; for(int i=0;i<g[u].size();i++){ int v=g[u][i]; if(d[v]==-1) { tarjan(v); l[u]=min(l[u],l[v]); }else { if(visit[v]==true){ l[u]=min(l[u],d[v]); } } } if(d[u]==l[u]){ c++; int v; do{ v=s1.top(); s1.pop(); s[v]=c; visit[v]=false; }while(u!=v); } return ; }
判桥
int d[10005],l[10005],ans,n,m,x,y,c,s[10005],a[10005],sum; vector<int> g[10005]; bool visit[10005]; stack<pair<int,int> > s1; void tarjan(int u,int father){ c=0; d[u]=l[u]=++ans; for(int i=0;i<g[u].size();i++){ int v=g[u][i]; if(d[v]==0) { c++; tarjan(v,u); l[u]=min(l[u],l[v]); if(l[v]>=d[u]) visit[u]=true; if(l[v]>d[u]) s1.push(make_pair(u,v)); }else { if(d[v]<d[u]&&v!=father) l[u]=min(l[u],d[v]); } } if(father<0&&c=1) visit[u]=false; }
判重边桥
int d[10005],l[10005],ans,n,m,x,y,c,s[10005],a[10005],sum,data[10005],next[10005],h[10005]; bool visit[10005]; stack<pair<int,int> > s1; void add(int u,int v){ data[++sum]=v; next[sum]=h[u]; h[u]=sum; } void tarjan(int u,int father){ d[u]=l[u]=++ans; for(int i=h[u];i!=-1;i=next[i]){ int v=data[i]; if(i==(father^ans)) continue; if(d[v]==0) { tarjan(v,i); l[u]=min(l[u],l[v]); if(l[v]>d[u]) cout<<u<<" "<<v<<endl; }else { l[u]=min(l[u],d[v]); } } }
void Floyd(){ for(int k=1;k<=n;k++){ for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ f[i][j]=min(f[i][j],f[i][k]+f[k][j]); } } } }
flody
#include <bits/stdc++.h> using namespace std; int d[10005],l[10005],ans,n,m,x,y,c,s[10005],a[10005],sum; vector<int> g[10005]; bool visit[10005]; stack<int> s1; void tarjan(int u){ d[u]=l[u]=++ans; s1.push(u); visit[u]=true; for(int i=0;i<g[u].size();i++){ int v=g[u][i]; if(d[v]==-1) { tarjan(v); l[u]=min(l[u],l[v]); }else { if(visit[v]==true){ l[u]=min(l[u],d[v]); } } } if(d[u]==l[u]){ c++; int v; do{ v=s1.top(); s1.pop(); s[v]=c; visit[v]=false; }while(u!=v); } return ; } signed main(){ cin>>n>>m; for(int i=1;i<=m;i++){ cin>>x>>y; g[x].push_back(y); } memset(d,-1,sizeof(d)); tarjan(1); for(int i=1;i<=n;i++){ if(s[i]==0){ tarjan(i); } } for(int i=1;i<=n;i++){ //cout<<s[i]<<" "; a[s[i]]++; } //cout<<endl; for(int i=1;i<=c;i++){ if(a[i]>1){ sum++; } } cout<<sum; return 0; }
tarjan
void tarjan(int u){ int c=0; d[u]=l[u]=++ans; for(int i=0;i<g[u].size();i++){ int v=g[u][i]; if(d[v]==0) { tarjan(v); l[u]=min(l[u],l[v]); if(l[v]>=d[u]){ c++; if(u!=1||c>1) a[u]=1; } }else { l[u]=min(d[v],l[u]); } } }
割点
-
通过的题目
-
最近活动
-
最近编写的题解
This person is lazy and didn't write any solutions.
题目标签
- 入门
- 1
- 有手就行
- 1
- 系统测试
- 1
- 数论
- 1
- 裂项
- 1