| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:可恶的poj,卡stl有意思吗?In Reply To:Re:可恶的poj,卡stl有意思吗? Posted by:lgeecn at 2012-09-15 22:57:04 LZ傻逼吧 我都过了 全STL的
#include<stack>
#include<cstdio>
#include<vector>
#include<iostream>
#include<algorithm>
#define pb push_back
#define rep(i,a,b) for (int i=a;i<=b;i++)
using namespace std;
const int MAX_N=10010;
int n,m,t0=0,scc=0;
bool in_stack[MAX_N];
int belong[MAX_N],d[MAX_N];
int low[MAX_N],dfn[MAX_N],Num[MAX_N];
vector<int> E[MAX_N],_E[MAX_N];
stack<int> Stack;
void init(){
ios::sync_with_stdio(false);
cin>>n>>m;
rep(i,1,m){
int a,b;
cin>>a>>b;
E[a].pb(b);
_E[b].pb(a);
}
}
#define put_in_lab(x) Num[scc]++,belong[x]=scc,in_stack[x]=0;
void dfs(int vi){
low[vi]=dfn[vi]=++t0;
in_stack[vi]=1;
Stack.push(vi);
rep(i,0,int(E[vi].size()-1)){
int now=E[vi][i];
if (!dfn[now]){
dfs(now);
low[vi]=min(low[vi],low[now]);
}
else
if (in_stack[now])
low[vi]=min(low[vi],dfn[now]);
}
if (low[vi]==dfn[vi]){
scc++;
put_in_lab(vi);
int h;
while ((h=Stack.top())!=vi){
put_in_lab(h);
Stack.pop();
}
Stack.pop();
}
}
void build_new_map(){
rep(i,1,n)
rep(j,0,int(_E[i].size()-1)){
int This=belong[_E[i][j]];
if (This==belong[i])
continue;
d[This]++;
}
}
void solve(){
rep(i,1,n)
if (!dfn[i])
dfs(i);
build_new_map();
int num=0,This;
rep(i,1,scc)
if (!d[i])
num++,This=i;
if (num!=1)
cout<<0<<endl;
else
cout<<Num[This]<<endl;
}
int main(){
freopen("1.in","r",stdin);
freopen("1.out","w",stdout);
init();
solve();
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator