Submission #337266

#TimeUsernameProblemLanguageResultExecution timeMemory
337266RegisterConnecting Supertrees (IOI20_supertrees)C++14
100 / 100
271 ms24328 KiB
#include <bits/stdc++.h>
#include "supertrees.h"
using namespace std;
typedef vector<vector<int> > va;
const int N=1005;
int n,idc[N],idt[N];
bool vis[N];
inline void add(int u,int v,va&g) {g[u][v]=g[v][u]=1;}
int construct(va p){
	n=p.size();va g(n,vector<int>(n));
	for(int i=0;i<n;i++)
		if(find(p[i].begin(),p[i].end(),3)!=p[i].end()) return 0;
	for(int i=0;i<n;i++)
		if(!vis[i]){
			queue<int> qc;qc.push(i);vector<int> c;
			while(!qc.empty()){
				int u=qc.front();qc.pop();if(vis[u]) continue;
				queue<int> qt;qt.push(u);vector<int> t;c.push_back(u);
				while(!qt.empty()){
					int x=qt.front();qt.pop();if(vis[x]) continue;
					t.push_back(x);idt[x]=u;idc[x]=i;vis[x]=1;
					for(int j=0;j<n;j++)
						if(p[x][j]==1) qt.push(j);
						else if(p[x][j]==2) qc.push(j);
				}
				for(int j=0;j+1<t.size();j++) add(t[j],t[j+1],g);
			}
			int sz=c.size();if(sz==2) return 0;
			if(sz>2) for(int j=0;j<sz;j++) add(c[j],c[(j+1)%sz],g);
		}
	for(int i=0;i<n;i++)
		for(int j=i+1;j<n;j++)
			if(idt[i]==idt[j]) {if(p[i][j]!=1) return 0;}
			else if(idc[i]==idc[j]) {if(p[i][j]!=2) return 0;}
	build(g);return 1;
}

Compilation message (stderr)

supertrees.cpp: In function 'int construct(va)':
supertrees.cpp:26:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   26 |     for(int j=0;j+1<t.size();j++) add(t[j],t[j+1],g);
      |                 ~~~^~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...