Kaidul

11331

Jun 17th, 2013
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.39 KB | None | 0 0
  1. #include <algorithm>
  2. #include <bitset>
  3. #include <cctype>
  4. #include <cmath>
  5. #include <complex>
  6. #include <cstdio>
  7. #include <cstdlib>
  8. #include <cstring>
  9. #include <ctime>
  10. #include <deque>
  11. #include <fstream>
  12. #include <iostream>
  13. #include <list>
  14. #include <climits>
  15. #include <map>
  16. #include <memory>
  17. #include <queue>
  18. #include <set>
  19. #include <sstream>
  20. #include <stack>
  21. #include <string>
  22. #include <utility>
  23. #include <vector>
  24. #include <iomanip>
  25. using namespace std;
  26. /*** typedef ***/
  27. #define MEMSET_INF 127
  28. #define MEMSET_HALF_INF 63
  29. #define stream istringstream
  30. #define rep(i,n) for(__typeof(n) i=0; i<(n); i++)
  31. #define repl(i,n) for(__typeof(n) i=1; i<=(n); i++)
  32. #define FOR(i,a,b) for(__typeof(b) i=(a); i<=(b); i++)
  33. #define INF (1<<30)
  34. #define PI acos(-1.0)
  35. #define pb push_back
  36. #define ppb pop_back
  37. #define all(x) x.begin(),x.end()
  38. #define mem(x,y) memset(x,y,sizeof(x))
  39. #define memsp(x) mem(x,MEMSET_INF)
  40. #define memdp(x) mem(x,-1)
  41. #define memca(x) mem(x,0)
  42. #define eps 1e-9
  43. #define pii pair<int,int>
  44. #define pmp make_pair
  45. #define ft first
  46. #define sd second
  47. #define vi vector<int>
  48. #define vpii vector<pii>
  49. #define si set<int>
  50. #define msi map<string , int >
  51. #define mis map<int , string >
  52. typedef long long i64;
  53. typedef unsigned long long ui64;
  54. /** function **/
  55. #define SDi(x) sf("%d",&x)
  56. #define SDl(x) sf("%lld",&x)
  57. #define SDs(x) sf("%s",x)
  58. #define SD2(x,y) sf("%d%d",&x,&y)
  59. #define SD3(x,y,z) sf("%d%d%d",&x,&y,&z)
  60. #define pf printf
  61. #define print(x) pf("%d ", x)
  62. #define println(x) pf("%d\n", x)
  63. #define sf scanf
  64. #define READ(f) freopen(f, "r", stdin)
  65. #define WRITE(f) freopen(f, "w", stdout)
  66.  
  67. #define M 1001
  68. #define MAX 40001
  69.  
  70. int N;
  71. vector <int> adj[MAX];
  72. int visited[MAX];
  73. queue <int> q;
  74.  
  75. enum animal {none, bull, cow};
  76. vector < pair <int, int> > arrangements;
  77. set <int> vertices;
  78.  
  79. void BFS(int src) {
  80.     q.push(src);
  81.     visited[src] = bull;
  82.     int b = 0, c = 0;
  83.     while(!q.empty()) {
  84.         int pop = q.front(), temp;
  85.         vertices.erase(pop);
  86.         if(visited[pop] == bull) b++;
  87.         else c++;
  88.         animal who = visited[pop] == bull ? cow : bull;
  89.         rep(i, adj[pop].size()) {
  90.             temp = adj[pop][i];
  91.             if(!visited[temp])
  92.                 visited[temp] = who, q.push(temp);
  93.         }
  94.         q.pop();
  95.     }
  96.     arrangements.pb(make_pair(b, c));
  97.     arrangements.pb(make_pair(c, b));
  98.     if(!vertices.empty()) BFS( *vertices.begin() );
  99. }
  100.  
  101. bool knapsack(int i, int b, int c) {
  102.     if(i >= N + 1) {
  103.         if(b == 0 && c == 0)
  104.             return true;
  105.         return false;
  106.     }
  107.     bool ret1 = false, ret2 = false;
  108.     if(b - arrangements[i].first >= 0 && c - arrangements[i].second >= 0)
  109.         ret1 = knapsack(i + 2, b - arrangements[i].first, c - arrangements[i].second);
  110.     ret2 = knapsack(i + 1, b, c);
  111.     return ret1 | ret2;
  112.  
  113. }
  114.  
  115. int main() {
  116. #ifndef ONLINE_JUDGE
  117.     READ("input.txt");
  118.     WRITE("output.txt");
  119. #endif
  120.     int tcase, u, v, b, c, a;
  121.     SDi(tcase);
  122.     while(tcase--) {
  123.         SD3(b, c, a);
  124.         rep(i, a) SD2(u, v), adj[u].pb(v), adj[v].pb(u), vertices.insert(u), vertices.insert(v);
  125.         memset(visited, none, sizeof visited);
  126.         N = vertices.size();
  127.         BFS(*vertices.begin());
  128.         if( knapsack(0, b, c) ) {
  129.             pf("yes\n");
  130.         } else pf("no\n");
  131.         rep(i, N + 10) adj[i].clear();
  132.         arrangements.clear();
  133.     }
  134.     return 0;
  135. }
Advertisement
Add Comment
Please, Sign In to add comment