QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#102644#5160. Kebab Pizzaw4p3r#WA 2ms3420kbC++201.7kb2023-05-03 15:25:462023-05-03 15:25:55

Judging History

你现在查看的是最新测评结果

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-05-03 15:25:55]
  • 评测
  • 测评结果:WA
  • 用时:2ms
  • 内存:3420kb
  • [2023-05-03 15:25:46]
  • 提交

answer

#include<bits/stdc++.h>
#define N 100005
using namespace std;
int n,m;
int in[N];
struct node{
	int x,y;
}Q[N],E[N];
inline bool cmp(node a,node b){
	return a.x==b.x?a.y<b.y:a.x<b.x;
}
inline void Rd(int &res){
	char c;res=0;
	while(c=getchar(),c<48);
	do res=(res<<3)+(res<<1)+(c^48);
	while(c=getchar(),c>47);
	return;
}
bool mark[N],vis[N];
inline bool add_edge(int a,int b){
	if(E[a].x==-1)E[a].x=b;
	else if(E[a].y==-1){
		if(mark[a])return false;
		E[a].y=b;
	}
	else return false;
	return true;
}
int dfs(int x,int f){
	if(x==-1||mark[x])return 2;
	if(vis[x])return 1;
	vis[x]=1;
	int nxt=Q[x].x;
	if(Q[x].x==f)nxt=Q[x].y;
	return dfs(nxt,x);
}
inline bool check(){
	for(int i=1;i<=m;i++)E[i].x=-1,E[i].y=-1;
	for(int i=1;i<=n;i++)if(Q[i].x==Q[i].y)mark[Q[i].x]=1;
	for(int i=1;i<=n;i++){
		if(Q[i].x==Q[i].y)continue;
		if(!add_edge(Q[i].x,Q[i].y))return false;
		if(!add_edge(Q[i].y,Q[i].x))return false;
	}
	int key=0;
	for(int i=1;i<=n;i++)if(!vis[i]){
		if(E[i].x==-1)continue;
		if(key==1)return false;
		int o=dfs(E[i].x,-2);
		if(o==1){
			if(key)return false;
			key=1;
		}
		else{
			key=2;
			dfs(E[i].y,-2);
		}
	}
	for(int i=1;i<=n;i++)if(mark[i]&&!vis[i])return false;
	return true;
}
int main(){
	Rd(n);Rd(m);
	for(int i=1;i<=n;i++){
		Rd(Q[i].x);Rd(Q[i].y);
		if(Q[i].x>Q[i].y)swap(Q[i].x,Q[i].y);
	}
	
	sort(Q+1,Q+n+1,cmp);
	int h=1;
	for(int i=2;i<=n;i++)if(Q[i].x!=Q[h].x||Q[i].y!=Q[h].y)Q[++h]=Q[i];
	n=h;
	for(int i=1;i<=n;i++)in[Q[i].x]++,in[Q[i].y]++;
	h=0;
	for(int i=1;i<=n;i++)if(in[Q[i].x]>1&&in[Q[i].y]>1&&Q[i].x!=Q[i].y)Q[++h]=Q[i];
	n=h;
	if(check())puts("possible");
	else puts("impossible");
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 2ms
memory: 3420kb

input:

7 6
2 2
3 6
1 1
1 5
4 5
6 6
6 5

output:

possible

result:

ok single line: 'possible'

Test #2:

score: 0
Accepted
time: 2ms
memory: 3332kb

input:

5 5
1 3
1 5
2 3
2 5
3 4

output:

possible

result:

ok single line: 'possible'

Test #3:

score: 0
Accepted
time: 2ms
memory: 3304kb

input:

6 7
1 2
2 3
3 4
4 5
3 6
6 7

output:

impossible

result:

ok single line: 'impossible'

Test #4:

score: 0
Accepted
time: 1ms
memory: 3276kb

input:

8 4
1 1
1 2
2 1
2 2
3 3
3 4
4 3
4 4

output:

possible

result:

ok single line: 'possible'

Test #5:

score: 0
Accepted
time: 0ms
memory: 3348kb

input:

4 4
1 2
2 1
3 4
4 3

output:

possible

result:

ok single line: 'possible'

Test #6:

score: 0
Accepted
time: 2ms
memory: 3284kb

input:

5 4
1 1
1 4
2 2
2 4
3 4

output:

possible

result:

ok single line: 'possible'

Test #7:

score: 0
Accepted
time: 2ms
memory: 3348kb

input:

6 4
1 1
1 4
2 2
2 4
3 3
3 4

output:

impossible

result:

ok single line: 'impossible'

Test #8:

score: -100
Wrong Answer
time: 2ms
memory: 3284kb

input:

4 5
1 2
3 4
4 5
5 3

output:

possible

result:

wrong answer 1st lines differ - expected: 'impossible', found: 'possible'