记录编号 85058 评测结果 AAAAAAAAAA
题目名称 完全排序网络 最终得分 100
用户昵称 Gravatarcstdio 是否通过 通过
代码语言 C++ 运行时间 0.077 s
提交时间 2013-12-24 21:08:03 内存使用 0.32 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<vector>
#include<queue>
#include<iomanip>
using namespace std;
const int SIZEN=101;
int inequ[SIZEN][SIZEN]={0};//描述不等式
int N,M;
void assign(int x,int y,int w){
	inequ[x][y]=w;
	inequ[y][x]=-w;
}
void work(void){
	scanf("%d%d",&N,&M);
	int i,a,b,c;
	for(i=1;i<=M;i++){
		scanf("%d%d",&a,&b);
		if(a>b) swap(a,b);
		if(a==b||inequ[a][b]) continue;
		assign(a,b,1);
		for(c=1;c<=N;c++){
			if(c==a||c==b) continue;
			if(inequ[c][a]==1&&inequ[c][b]==0) assign(c,b,1),assign(c,a,0);//1.1
			else if(inequ[c][a]==-1&&inequ[c][b]==0) assign(c,a,-1),assign(c,b,0);//1.2
			else if(inequ[c][a]==0&&inequ[c][b]==1) assign(c,b,1),assign(c,a,0);//2.1
			else if(inequ[c][a]==0&&inequ[c][b]==-1) assign(c,a,-1),assign(c,b,0);//2.2
		}
	}
}
void check(void){
	int i;
	for(i=1;i<N;i++){
		if(inequ[i][i+1]!=1){
			printf("No!\n");
			return;
		}
	}
	printf("Yes!\n");
}
int main(){
	freopen("sortingnet.in","r",stdin);
	freopen("sortingnet.out","w",stdout);
	work();
	check();
	return 0;
}