답안 #145131

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
145131 2019-08-18T21:15:34 Z bogdan_buzatu Alkemija (COCI18_alkemija) C++14
80 / 80
197 ms 12276 KB
#include <iostream>
#include <vector>
using namespace std;

struct reactie{
    int needed;
    int contsol;
    int contramase;
    vector<int>soli;
}v[100010];

vector<int>a[100010];
int freq[100010],checked[100010],q[100010];
int rightd,lefts=1;
int n,m,x;
int k,y,curent,curentt,cont;


int main(){
    cin>>n>>m;

    for(int i=1;i<=m;i++){
        cin>>x;
        freq[x]=1;
    }
    cin>>k;

    for(int i=1;i<=k;i++){
        cin>>v[i].contsol>>v[i].needed;
        v[i].contramase=v[i].contsol;
        for(int j=1;j<=v[i].contsol;j++){
            cin>>x;
            a[x].push_back(i);
            if(freq[x]==1){
                v[i].contramase--;
                if(v[i].contramase==0){
                    rightd++;
                    q[rightd]=i;
                    checked[i]=1;
                }
            }
        }
        for(int j=1; j<=v[i].needed; j++){
            cin>>x;
            v[i].soli.push_back(x);
        }
    }

    while(lefts<=rightd){
        curent=q[lefts];
        for(int i=0; i<v[curent].soli.size(); i++){
            y=v[curent].soli[i];
            if(freq[y]==0){
                freq[y]=1;
                for(int j=0; j<a[y].size(); j++){
                    curentt=a[y][j];
                    if(checked[curentt]==0){
                        v[curentt].contramase--;
                        if(v[curentt].contramase==0){
                            rightd++;
                            q[rightd]=curentt;
                            checked[curentt]=1;
                        }
                    }
                }
            }
        }
        lefts++;
    }

    for(int i=1;i<=n;i++){
        if (freq[i]==1){
            cont++;
        }
    }

    cout<<cont<<"\n";

    for(int i=1;i<=n;i++){
        if (freq[i]==1){
            cout<<i<<" ";
        }
    }
}

Compilation message

alkemija.cpp: In function 'int main()':
alkemija.cpp:51:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(int i=0; i<v[curent].soli.size(); i++){
                      ~^~~~~~~~~~~~~~~~~~~~~~
alkemija.cpp:55:31: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
                 for(int j=0; j<a[y].size(); j++){
                              ~^~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 9 ms 6648 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 7 ms 6648 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 9 ms 6648 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 7 ms 6520 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 8 ms 6648 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 8 ms 6648 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 54 ms 7800 KB Output is correct
2 Correct 72 ms 8880 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 135 ms 9464 KB Output is correct
2 Correct 145 ms 11172 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 177 ms 10688 KB Output is correct
2 Correct 162 ms 9848 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 197 ms 11256 KB Output is correct
2 Correct 184 ms 12276 KB Output is correct