⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 schlnet.cpp

📁 dd牛的usaco源代码!对学习算法
💻 CPP
字号:
/*
ID: dd.ener1
PROG: schlnet
LANG: C++
*/

#include <cstdio>
#include <cstring>
using namespace std;

const int maxn=128;
bool g[maxn][maxn];
int N;
int R1,R2;
int r[maxn];//强连通子图的代表顶点 

void input(){
	memset(g,0,sizeof(g));
	freopen("schlnet.in","r",stdin);
	scanf("%d",&N);
	for(int i=1;i<=N;){
		int x;
		scanf("%d",&x);
		if(!x)++i;
		else g[i][x]=true;
	}
}
void solve(){
	for(int k=1;k<=N;++k)	
		for(int i=1;i<=N;++i)
			for(int j=1;j<=N;++j)
				if(g[i][k]&&g[k][j])g[i][j]=true;
	for(int i=1;i<=N;++i){
		if(r[i])continue;
		r[i]=i;
		for(int j=1;j<=N;++j){
			if(g[i][j]&&g[j][i])
				r[j]=i;
		}
	}
	int n=0,NoIn=0,NoOut=0;
	for(int i=1;i<=N;++i){
		if(r[i]!=i)continue;
		++n;
		bool in=false,out=false;
		for(int j=1;j<=N;++j){
			if(i==j)continue;
			if(r[j]!=j)continue;
			if(g[i][j])out=true;
			if(g[j][i])in=true;
		}
		if(!in)++NoIn;
		if(!out)++NoOut;
	}
	if(n==1){
		R1=1;
		R2=0;
	}
	else{
		R1=NoIn;
		if(R1==0)R1=1;
		R2=NoIn>NoOut?NoIn:NoOut;
	}
}
void output(){
	freopen("schlnet.out","w",stdout);
	printf("%d\n%d\n",R1,R2);
}
int main(){
	//freopen("schlnet.log","w",stdout);
	input();
	solve();
	output();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -