제출 #239450

#제출 시각아이디문제언어결과실행 시간메모리
239450kshitij_sodaniIzlet (COI19_izlet)C++17
43 / 100
698 ms74216 KiB
#include <bits/stdc++.h>
using namespace std;
typedef int64_t llo;
#define mp make_pair
#define pb push_back
#define a first 
#define b second
int dist[3001][3001];
int par[3001];
int find(int no){
	if(par[no]==no){
		return no;
	}
	par[no]=find(par[no]);
	return par[no];
}
int main(){
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	int tt;
	cin>>tt;
	int n;
	cin>>n;
	for(int i=0;i<n;i++){
		par[i]=i;
		for(int j=0;j<n;j++){
			cin>>dist[i][j];
		}
	}
	if(tt==1){
		for(int i=0;i<n;i++){
			for(int j=i+1;j<n;j++){
				if(dist[i][j]==1){
					int x=find(i);
					int y=find(j);
					par[x]=y;
				}
			}
		}
		map<int,vector<int>> ss;
		for(int i=0;i<n;i++){
			find(i);
			ss[par[i]].pb(i);
		}
		int col[n];
		vector<pair<int,int>> ans;
		int co=2;
		int prev=-1;
		for(auto j:ss){
			co=3-co;
			for(auto i:j.b){
				col[i]=co;
			}
			for(int i=0;i<j.b.size()-1;i++){
				ans.pb({j.b[i],j.b[i+1]});
			}

			if(prev!=-1){
				ans.pb({prev,j.b[0]});
			}
			prev=j.b.back();
		}
		for(int i=0;i<n;i++){
			cout<<col[i]<<" ";
		}
		cout<<endl;
		for(auto j:ans){
			cout<<j.a+1<<" "<<j.b+1<<endl;
		}
	}
	else if(tt==2){
		int col[n];
		col[0]=1;
		int cur=1;
		for(int i=1;i<n;i++){
			int st=0;
			for(int j=i-1;j>=0;j--){
				if(dist[i][j]==dist[i-1][j]){
					st=1;
					col[i]=col[j];
					break;
				}
			}
			if(st==0){
				cur++;
				col[i]=cur;
			}
		}
		for(int i=0;i<n;i++){
			cout<<col[i]<<" ";
		}
		cout<<endl;


		for(int i=0;i<n-1;i++){
			cout<<i+1<<" "<<i+2<<endl;
		}


	}



	return 0;
}

컴파일 시 표준 에러 (stderr) 메시지

izlet.cpp: In function 'int main()':
izlet.cpp:54:17: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    for(int i=0;i<j.b.size()-1;i++){
                ~^~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...