Submission #243241

# Submission time Handle Problem Language Result Execution time Memory
243241 2020-06-30T15:43:04 Z vanic Ili (COI17_ili) C++14
0 / 100
6 ms 1792 KB
#include <iostream>
#include <cstdio>
#include <math.h>
#include <algorithm>
#include <vector>
#include <set>
#include <stack>
#include <queue>
#include <string.h>
#include <bitset>

using namespace std;


const int maxn=2e4+5;

vector < int > ms[maxn];
vector < int > up[maxn];
vector < int > boje[maxn];
int kol[maxn];
int val[maxn];

int pretvori(string x){
	int br=0;
	for(int i=1; i<x.size(); i++){
		br*=10;
		br+=x[i]-'0';
	}
	return br;
}

void gore(int x){
	val[x]=1;
	for(int i=0; i<up[x].size(); i++){
		if(val[up[x][i]]==-1){
			gore(up[x][i]);
		}
	}
}

void dolje(int x){
	val[x]=0;
	for(int i=0; i<ms[x].size(); i++){
		if(val[ms[x][i]]==-1){
			dolje(ms[x][i]);
		}
	}
}

void probaj(int x){
	val[x]=1;
	if(ms[x].size()==1){
		if(val[ms[x][0]]==-1){
			probaj(ms[x][0]);
			gore(ms[x][0]);
		}
	}
	else if(ms[x].size()==2){
		if(!val[ms[x][0]] && val[ms[x][1]]==-1){
			probaj(ms[x][1]);
			gore(ms[x][1]);
		}
		else if(!val[ms[x][1]] && val[ms[x][0]]==-1){
			probaj(ms[x][0]);
			gore(ms[x][0]);
		}
	}
}
bitset < maxn > bio;

bool dfs(int x){
	bio[x]=1;
	for(int i=0; i<up[x].size(); i++){
		if(bio[up[x][i]]){
			gore(up[x][i]);
		}
		else{
			dfs(up[x][i]);
		}
	}
}

int main(){
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	int n, m;
	cin >> n >> m;
	string s;
	cin >> s;
	string a, b;
	int br1, br2;
	memset(val, -1, sizeof(val));
	for(int i=0; i<m; i++){
		cin >> a >> b;
		br1=pretvori(a);
		br2=pretvori(b);
		br1--;
		br2--;
		if(a[0]=='c'){
			br1+=n;
		}
		if(b[0]=='c'){
			br2+=n;
		}
		if(br1!=br2){
			up[br1].push_back(i+n);
			up[br2].push_back(i+n);
			ms[i+n].push_back(br1);
			ms[i+n].push_back(br2);
		}
		else{
			up[br1].push_back(i+n);
			ms[i+n].push_back(br1);
		}
	}
	for(int i=0; i<m; i++){
		if(val[i+n]==-1){
			if(s[i]=='0'){
				dolje(i+n);
			}
			else if(s[i]=='1'){
				gore(i+n);
			}
		}
	}
	for(int i=0; i<m; i++){
		if(val[i+n]==1){
			probaj(i+n);
		}
	}
	for(int i=0; i<m; i++){
		if(val[i+n]==1 && val[ms[i+n][0]]==-1 && val[ms[i+n][1]]==-1){
			dfs(ms[i+n][0]);
			bio[i+n]=0;
			dfs(ms[i+n][1]);
			bio.reset();
		}
	}
	for(int i=0; i<m; i++){
		if(val[i+n]==-1){
			cout << '?';
		}
		else{
			cout << val[i+n];
		}
	}
	cout << '\n';
	return 0;
}

Compilation message

ili.cpp: In function 'int pretvori(std::__cxx11::string)':
ili.cpp:25:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=1; i<x.size(); i++){
               ~^~~~~~~~~
ili.cpp: In function 'void gore(int)':
ili.cpp:34:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0; i<up[x].size(); i++){
               ~^~~~~~~~~~~~~
ili.cpp: In function 'void dolje(int)':
ili.cpp:43:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0; i<ms[x].size(); i++){
               ~^~~~~~~~~~~~~
ili.cpp: In function 'bool dfs(int)':
ili.cpp:73:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0; i<up[x].size(); i++){
               ~^~~~~~~~~~~~~
ili.cpp:81:1: warning: no return statement in function returning non-void [-Wreturn-type]
 }
 ^
# Verdict Execution time Memory Grader output
1 Correct 6 ms 1792 KB Output is correct
2 Correct 6 ms 1792 KB Output is correct
3 Incorrect 5 ms 1792 KB Output isn't correct
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 6 ms 1792 KB Output is correct
2 Correct 6 ms 1792 KB Output is correct
3 Incorrect 5 ms 1792 KB Output isn't correct
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 6 ms 1792 KB Output is correct
2 Correct 6 ms 1792 KB Output is correct
3 Incorrect 5 ms 1792 KB Output isn't correct
4 Halted 0 ms 0 KB -