10785 2024. 04. 12 16:00:44 111 Vasútépítés cpp17 Elfogadva 100/100 71ms 29196 KiB
#include<bits/stdc++.h>
using namespace std;

#define int long long

signed main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
#ifdef CB
	freopen("be3.txt","r",stdin);
//	freopen("ki.txt","w",stdout);
#endif
	int N,M;
	cin>>N>>M;
	vector<vector<int>>g(N+1);
	for(int i=0;i<M;i++){
		int a,b;
		cin>>a>>b;
		g[a].push_back(b);
		g[b].push_back(a);
	}
	int x1=0,x2=1e7,x3=2e7;
	vector<vector<int>>ans(N+1,vector<int>(N+1,-1));
	auto add1=[&](int i,int j)->void{
		ans[i][j]=x1;
		ans[j][i]=x1;
		x1++;
	};
	auto add2=[&](int i,int j)->void{
		ans[i][j]=x2;
		ans[j][i]=x2;
		x2++;
	};
	vector<int>v(N+1),w(N+1),p(N+1);
	for(int i=1;i<=N;i++){
		if(v[i]){
			continue;
		}
		v[i]=1;
		vector<int>c;
		vector<int>s;
		vector<int>t;
		auto dfs=[&](auto self,int i)->void{
			s.push_back(i);
			t.push_back(i);
			for(int j:g[i]){
				if(j==p[i]){
					continue;
				}
				if(v[j]){
					if(v[j]<v[i]){
						if(!c.empty()){
							cout<<-1<<'\n';
							exit(0);
						}
						c.push_back(j);
						w[j]=c.size();
						for(int k=s.size()-1;s[k]!=j;k--){
							c.push_back(s[k]);
							w[s[k]]=c.size();
						}
					}
					if(v[j]>v[i]&&!w[i]){
						cout<<-1<<'\n';
						exit(0);
					}
					continue;
				}
				v[j]=v[i]+1;
				p[j]=i;
				self(self,j);
			}
			s.pop_back();
		};
		dfs(dfs,i);
		if(!c.empty()){
			for(int i:c){
				auto dfs2=[&](auto self,int i,int p)->void{
					for(int j:g[i]){
						if(j==p||w[j]){
							continue;
						}
						add2(i,j);
						self(self,j,i);
					}
				};
				dfs2(dfs2,i,0);
			}
			for(int i=0;i<c.size();i++){
				add1(c[i],c[(i+1)%c.size()]);
			}
		}
		else{
			for(int j:t){
				add2(j,p[j]);
			}
		}
	}
	for(int i=1;i<=N;i++){
		vector<int>s=ans[i];
		sort(s.rbegin(),s.rend());
		while(!s.empty()&&s.back()==-1){
			s.pop_back();
		}
		int ok=0;
		for(int j:g[i]){
			if(s.size()>=1&&ans[i][j]==s.back()||s.size()>=2&&ans[i][j]==s.end()[-2])ok=1;
		}
		if(!ok){
			cout<<-1<<'\n';
			exit(0);
		}
	}
	for(int i=1;i<=N;i++){
		for(int j=i+1;j<=N;j++){
			if(ans[i][j]==-1){
				ans[i][j]=x3++;
			}
			cout<<ans[i][j]<<' ';
		}
		cout<<'\n';
	}
	return 0;
}
Részfeladat Összpont Teszt Verdikt Idő Memória
subtask1 0/0
1 Elfogadva 3ms 1700 KiB
2 Elfogadva 3ms 1868 KiB
3 Elfogadva 3ms 2312 KiB
subtask2 40/40
4 Elfogadva 71ms 18372 KiB
5 Elfogadva 70ms 18592 KiB
6 Elfogadva 71ms 18888 KiB
7 Elfogadva 71ms 19060 KiB
8 Elfogadva 71ms 19120 KiB
9 Elfogadva 70ms 19352 KiB
10 Elfogadva 68ms 19680 KiB
11 Elfogadva 3ms 3752 KiB
subtask3 60/60
12 Elfogadva 71ms 18372 KiB
13 Elfogadva 70ms 18592 KiB
14 Elfogadva 71ms 18888 KiB
15 Elfogadva 71ms 19060 KiB
16 Elfogadva 71ms 19120 KiB
17 Elfogadva 70ms 19352 KiB
18 Elfogadva 68ms 19680 KiB
19 Elfogadva 3ms 3752 KiB
20 Elfogadva 71ms 20084 KiB
21 Elfogadva 71ms 19616 KiB
22 Elfogadva 71ms 19796 KiB
23 Elfogadva 68ms 19812 KiB
24 Elfogadva 68ms 20016 KiB
25 Elfogadva 71ms 20372 KiB
26 Elfogadva 71ms 20252 KiB
27 Elfogadva 71ms 20300 KiB
28 Elfogadva 48ms 29196 KiB
29 Elfogadva 13ms 20368 KiB
30 Elfogadva 8ms 20672 KiB
31 Elfogadva 8ms 20356 KiB