您是不是markdown写错了这个好难看。。。
by sky_fackr @ 2018-11-20 23:25:22
@[王毅翀](/space/show?uid=72665)
格式
```cpp
#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
int n,m;const int maxn=10005;
vector<int> ve[maxn];
vector<int> ve2[maxn];
int sta[maxn],id[maxn];int din=0;
int dfn[maxn],low[maxn];int hig=0;
void dfs(int x,int fa){
int sz=ve[x].size();
dfn[x]=low[x]=++hig;
sta[++din]=x;
rep(i,0,sz-1){
int y=ve[x][i];
if(dfn[y]){
low[x]=min(low[x],dfn[y]);
}else{
dfs(y,x);
low[x]=min(low[x],low[y]);
}
}
if(low[x]+0==dfn[x]){
while(hig&&sta[hig]!=x){
id[sta[hig--]]=x;
}
id[x]=x;
if(hig)hig--;
}
}
int main(){
scanf("%d%d",&n,&m);
rep(i,1,m){
int x,y;scanf("%d%d",&x,&y);
ve[x].push_back(y);
}
rep(i,1,n){
if(!dfn[i])dfs(i,-1);
}
rep(i,1,n)cout<<dfn[i]<<" ";;cout<<endl;
rep(i,1,n)cout<<low[i]<<" ";;cout<<endl;
rep(i,1,n)cout<<id[i]<<" ";;cout<<endl;
rep(i,1,n){
int sz=ve[i].size();
rep(j,0,sz-1)ve2[id[i]].push_back(id[ve[i][j]]);
}
int pos=0;
rep(i,1,n)if(i==id[i]){
cout<<i<<"$"<<ve2[i].size()<<"\n";
if(ve2[i].size()==0){
pos=pos==0?i:-1;
}
}
if(pos==-1){
printf("0\n");
}else{
int cnt=0;
rep(i,1,n)if(pos==id[i])cnt++;
printf("%d\n",cnt);
}
return 0;
}
```
by resftlmuttmotw @ 2018-11-20 23:37:58