fork download
  1. #include<bits/stdc++.h>
  2. #define MP make_pair
  3. #define A first
  4. #define B second;
  5. using namespace std;
  6. const int N = 200000 + 5;
  7. set<int> s[N];
  8. int nr[N * 2], ans[N], vis[N];
  9. priority_queue<pair<int, int> > pq;
  10.  
  11. int main(){
  12. int n, m, k, x;
  13. scanf("%d%d", &m, &n);
  14. for (int i = 1; i <= m; i++){
  15. scanf("%d", &k);
  16. for (int j = 1; j <= k; j++){
  17. scanf("%d", &x);
  18. nr[n + x] = i;
  19. s[i].insert(x);
  20. }
  21. pq.push(MP(-s[i].size(), i));
  22. }
  23. while (! pq.empty()){
  24. int k = pq.top().B;
  25. pq.pop();
  26. if (vis[k]) continue;
  27. vis[k] = 1;
  28. if (s[k].empty()){
  29. puts("NO");
  30. return 0;
  31. }
  32. int x = *s[k].begin();
  33. ans[abs(x)] = (x > 0);
  34. int i = nr[n - x];
  35. if (i){
  36. s[i].erase(-x);
  37. pq.push(MP(-s[i].size(), i));
  38. }
  39. }
  40. puts("YES");
  41. for (int i = 1; i <= n; i++) printf("%d", ans[i]);
  42. puts("");
  43. return 0;
  44. }
Success #stdin #stdout 0.01s 11280KB
stdin
2 2
2 -1 2
1 1
stdout
YES
11