记录编号 |
85058 |
评测结果 |
AAAAAAAAAA |
题目名称 |
完全排序网络 |
最终得分 |
100 |
用户昵称 |
cstdio |
是否通过 |
通过 |
代码语言 |
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;
}