답안 #80066

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
80066 2018-10-18T16:05:51 Z fabjanm KOVANICE (COI15_kovanice) C++
0 / 100
2000 ms 27220 KB
#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
#include<set>
#include<map>
#include<queue>
#include<iomanip>
#include<cstring>

using namespace std;

int n,m,v;
int brcv=0;

vector<pair<int,int> >jed;
vector<pair<pair<int,int>,char> >raz;

map<int,int>mapa;

int parent[300500];
vector<int> sus[300500];

int sol[300500];
vector<int>koji;

void input(){
    cin>>n>>m>>v;
    int br1,br2;
    char zn;
    string r;

    for(int i=0;i<v;i++){
        cin>>br1>>zn>>br2;
        if(zn=='=')jed.push_back(make_pair(min(br1,br2),max(br1,br2)));
        else raz.push_back(make_pair(make_pair(br1,br2),zn));
    }
}

void rek(int cvor, int br){
    //cout<<"                                     "<<br<<endl;
    if(br==n){
        koji.push_back(cvor);
        return;
    }
    else if(sus[cvor].size()==0)return;

    for(int i=0;i<sus[cvor].size();i++)rek(sus[cvor][i], br+1);
}

void solve(){
    sort(jed.begin(),jed.end());
    int oz=0;
    for(int i=0;i<jed.size();i++){
        int br1=jed[i].first;
        int br2=jed[i].second;
        if(mapa[br1]==0 && mapa[br2]==0){
            oz++;
            brcv++;
            mapa[br1]=oz;
            mapa[br2]=oz;
        }
        else if(mapa[br1]==0 && mapa[br2]!=0)mapa[br1]=mapa[br2];
        else if(mapa[br1]!=0 && mapa[br2]==0)mapa[br2]=mapa[br1];
    }

    for(int i=0;i<raz.size();i++){
        int br1=raz[i].first.first;
        int br2=raz[i].first.second;
        char zn=raz[i].second;

        if(mapa[br1]==0){
            oz++;
            brcv++;
            mapa[br1]=oz;
        }
        if(mapa[br2]==0){
            oz++;
            brcv++;
            mapa[br2]=oz;
        }

        if(zn=='<'){
            parent[mapa[br1]]=mapa[br2];
            sus[mapa[br2]].push_back(mapa[br1]);
        }
        else{
            parent[mapa[br2]]=mapa[br1];
            sus[mapa[br1]].push_back(mapa[br2]);
        }
    }

    /*for(int i=1;i<=brcv;i++)cout<<i<<" -> "<<parent[i]<<endl;
    cout<<endl<<endl;

    for(int i=1;i<=brcv;i++){
        cout<<i<<" -> ";
        for(int j=0;j<sus[i].size();j++){
            cout<<sus[i][j]<<" ";
        }
        cout<<endl;
    }*/

    for(int i=1;i<=brcv;i++){
        int cvor=i;
        //cout<<cvor<<"    "<<parent[cvor]<<endl;
        if(parent[cvor]==0){
            //cout<<cvor<<endl;
            rek(cvor, 1);
        }
    }

    //cout<<"size od koji je :   "<<koji.size()<<endl;
    for(int i=0;i<koji.size();i++){
        int br=1,cvor=koji[i];
        for(int j=0;j<n;j++){
            if(sol[cvor]!=0)break;
            sol[cvor]=br;
            cvor=parent[cvor];
            br++;
        }
    }

    ///for(int i=1;i<=m;i++)cout<<i<<" -> "<<mapa[i]<<endl;
    ///cout<<endl<<endl;
    ///for(int i=1;i<=brcv;i++)cout<<i<<" -> "<<parent[i]<<endl;
    //cout<<brcv<<endl;
}

void print(){
    for(int i=1;i<=m;i++){
        if(sol[mapa[i]] != 0)cout<<"K"<<sol[mapa[i]]<<endl;
        else cout<<"?"<<endl;
    }
}

int main(){
    input();
    solve();
    print();



    return 0;
}

Compilation message

kovanice.cpp: In function 'void rek(int, int)':
kovanice.cpp:48:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i=0;i<sus[cvor].size();i++)rek(sus[cvor][i], br+1);
                 ~^~~~~~~~~~~~~~~~~
kovanice.cpp: In function 'void solve()':
kovanice.cpp:54:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i=0;i<jed.size();i++){
                 ~^~~~~~~~~~~
kovanice.cpp:67:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i=0;i<raz.size();i++){
                 ~^~~~~~~~~~~
kovanice.cpp:114:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i=0;i<koji.size();i++){
                 ~^~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Incorrect 13 ms 7544 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 625 ms 20620 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 2052 ms 20620 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 2060 ms 27220 KB Time limit exceeded
2 Halted 0 ms 0 KB -