Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <list>
- using namespace std;
- int grupa[10000];
- bool zbadany[10000];
- int main()
- {
- int a,s,i,w,u,wl,n;
- cin >> n;
- // int wynik[n];
- // bool zbadany[n];
- //int *grupa = new int[n];
- //bool *zbadany = new bool[n];
- vector< list<int> > anty(n);
- vector< list<int> > sym(n);
- list<int>::iterator it;
- cin >> a;
- for(i=0;i<a;i++)
- {
- cin >> w; cin >> u;
- anty[w].push_back(u);
- }
- cin >> s;
- for(i=0;i<s;i++)
- {
- cin >> w; cin >> u;
- sym[w].push_back(u);
- }
- // dane wczytywane poprawnie
- grupa[0] = 0;// 0 - urzednik 0 do tury 0
- zbadany[0] = false;
- for(i=1;i<n;i++)
- {
- grupa[i] = 2; // 2 - brak przyznanej grupy
- zbadany[i] = false;
- }
- bool ok=true;
- list<int> ls_wyk;
- for(i=0; i<n && ok; i++)
- {
- if ( grupa[i] != 2 && zbadany[i] ) // jest przyznana
- continue;
- else
- {
- grupa[i] = grupa[0];
- ls_wyk.push_front(i);
- while( !ls_wyk.empty() && ok )
- {
- wl = ls_wyk.front();
- //if( !sym[wl].empty() )
- //{
- for( it=sym[wl].begin(); it != sym[wl].end(); it++ )
- {
- if( (grupa[wl] == 1 && grupa[*it] == 1) || (grupa[wl] == 0 && grupa[*it] == 0) )
- ;
- else if (grupa[*it] == 2 && grupa[wl] == 2)
- ls_wyk.push_front(*it);
- else
- {
- if( (grupa[wl] == 1 && grupa[*it] == 0) || (grupa[wl] == 0 && grupa[*it] == 1) )
- {
- ok = false;
- break;
- }
- else
- {
- if( grupa[*it] == 2 )
- {
- grupa[*it] = grupa[wl];
- ls_wyk.push_back(*it);
- }
- else
- {
- grupa[wl] = grupa[*it];
- ls_wyk.push_back(wl);
- }
- }
- }
- }
- //}
- //if ( !anty[wl].empty() )
- //{
- for( it=anty[wl].begin(); it != anty[wl].end(); it++ )
- {
- if( (grupa[wl] == 1 && grupa[*it] == 0) || (grupa[wl] == 0 && grupa[*it] == 1) )
- ;
- else if (grupa[*it] == 2 && grupa[wl] == 2)
- ls_wyk.push_front(*it);
- else
- {
- if( (grupa[wl] == 1 && grupa[*it] == 1) || (grupa[wl] == 0 && grupa[*it] == 0) )
- {
- ok = false;
- break;
- }
- else
- {
- if( grupa[*it] == 2 )
- {
- grupa[*it] = !grupa[wl];
- ls_wyk.push_back(*it);
- }
- else
- {
- grupa[wl] = !grupa[*it];
- ls_wyk.push_back(wl);
- }
- }
- }
- }
- //}
- if( grupa[wl] == 0 || grupa[wl] == 1 )
- zbadany[wl] = true;
- //if( zbadany[wl] )
- ls_wyk.pop_front();
- }
- }
- }
- if (!ok || n==0 )
- cout << "NO";
- else
- for(i=0;i<n;i++)
- cout << grupa[i] << endl;
- // system("pause");
- return 0;
- }
Add Comment
Please, Sign In to add comment