Submission #427579

#TimeUsernameProblemLanguageResultExecution timeMemory
427579TLP39장난감 기차 (IOI17_train)C++14
100 / 100
350 ms1228 KiB
#include "train.h"
#include<bits/stdc++.h>
using namespace std;
 
int n,m;
vector<int> point_to[5003];
int ori_outdeg[5003]={};
int temp_outdeg[5003];
bool loop[5003];
bool temp_loop[5003];
int cou_loop=0,cou_temp_loop;
bool fin_res[5003];
bool getreach()
{
  	queue<int> q;
  	int tt;
  	for(int i=0;i<n;i++) temp_outdeg[i]=ori_outdeg[i];
  	for(int i=0;i<n;i++) temp_loop[i]=false;
  	cou_temp_loop=0;
  	for(int j=0;j<n;j++)
    {
      	if(!loop[j]) continue;
      	for(int i=0;i<point_to[j].size();i++)
    	{
      		temp_outdeg[point_to[j][i]]--;
      		if(!temp_outdeg[point_to[j][i]]) q.push(point_to[j][i]);
   		}
    }
  	
  	while(!q.empty())
    {
      	tt=q.front();
      	q.pop();
      	temp_loop[tt]=true;
      	if(loop[tt])
        {
          	cou_temp_loop++;
          	continue;
        }
      	for(int i=0;i<point_to[tt].size();i++)
    	{
      		temp_outdeg[point_to[tt][i]]--;
      		if(!temp_outdeg[point_to[tt][i]]) q.push(point_to[tt][i]);
    	}
    }
  	for(int i=0;i<n;i++) {loop[i]=min(loop[i],temp_loop[i]);fin_res[i]=temp_loop[i];}
  	int temp2=cou_loop;
  	cou_loop=cou_temp_loop;
  	return temp2==cou_temp_loop;
}
 
std::vector<int> who_wins(std::vector<int> a, std::vector<int> r, std::vector<int> u, std::vector<int> v) {
	std::vector<int> res(a.size(),1);
  	n=a.size();
  	m=u.size();
  	for(int i=0;i<m;i++) 
    {
      	point_to[v[i]].push_back(u[i]);
      	ori_outdeg[u[i]]++;
    }
  	for(int i=0;i<n;i++) {loop[i]=r[i]; cou_loop+=r[i];}
  	for(int i=0;i<n;i++) if(a[i]) ori_outdeg[i]=1;
  	while(!getreach()) continue;
  	for(int i=0;i<n;i++)
    {
      	res[i]=fin_res[i];
    }
  	return res;
}

Compilation message (stderr)

train.cpp: In function 'bool getreach()':
train.cpp:23:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   23 |        for(int i=0;i<point_to[j].size();i++)
      |                    ~^~~~~~~~~~~~~~~~~~~
train.cpp:40:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   40 |        for(int i=0;i<point_to[tt].size();i++)
      |                    ~^~~~~~~~~~~~~~~~~~~~
#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...