Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <algorithm>
- #include <bitset>
- #include <cctype>
- #include <cmath>
- #include <complex>
- #include <cstdio>
- #include <cstdlib>
- #include <cstring>
- #include <ctime>
- #include <deque>
- #include <fstream>
- #include <iostream>
- #include <list>
- #include <climits>
- #include <map>
- #include <memory>
- #include <queue>
- #include <set>
- #include <sstream>
- #include <stack>
- #include <string>
- #include <utility>
- #include <vector>
- #include <iomanip>
- using namespace std;
- /*** typedef ***/
- #define MEMSET_INF 127
- #define MEMSET_HALF_INF 63
- #define stream istringstream
- #define rep(i,n) for(__typeof(n) i=0; i<(n); i++)
- #define repl(i,n) for(__typeof(n) i=1; i<=(n); i++)
- #define FOR(i,a,b) for(__typeof(b) i=(a); i<=(b); i++)
- #define INF (1<<30)
- #define PI acos(-1.0)
- #define pb push_back
- #define ppb pop_back
- #define all(x) x.begin(),x.end()
- #define mem(x,y) memset(x,y,sizeof(x))
- #define memsp(x) mem(x,MEMSET_INF)
- #define memdp(x) mem(x,-1)
- #define memca(x) mem(x,0)
- #define eps 1e-9
- #define pii pair<int,int>
- #define pmp make_pair
- #define ft first
- #define sd second
- #define vi vector<int>
- #define vpii vector<pii>
- #define si set<int>
- #define msi map<string , int >
- #define mis map<int , string >
- typedef long long i64;
- typedef unsigned long long ui64;
- /** function **/
- #define SDi(x) sf("%d",&x)
- #define SDl(x) sf("%lld",&x)
- #define SDs(x) sf("%s",x)
- #define SD2(x,y) sf("%d%d",&x,&y)
- #define SD3(x,y,z) sf("%d%d%d",&x,&y,&z)
- #define pf printf
- #define print(x) pf("%d ", x)
- #define println(x) pf("%d\n", x)
- #define sf scanf
- #define READ(f) freopen(f, "r", stdin)
- #define WRITE(f) freopen(f, "w", stdout)
- #define M 1001
- #define MAX 40001
- int N;
- vector <int> adj[MAX];
- int visited[MAX];
- queue <int> q;
- enum animal {none, bull, cow};
- vector < pair <int, int> > arrangements;
- set <int> vertices;
- void BFS(int src) {
- q.push(src);
- visited[src] = bull;
- int b = 0, c = 0;
- while(!q.empty()) {
- int pop = q.front(), temp;
- vertices.erase(pop);
- if(visited[pop] == bull) b++;
- else c++;
- animal who = visited[pop] == bull ? cow : bull;
- rep(i, adj[pop].size()) {
- temp = adj[pop][i];
- if(!visited[temp])
- visited[temp] = who, q.push(temp);
- }
- q.pop();
- }
- arrangements.pb(make_pair(b, c));
- arrangements.pb(make_pair(c, b));
- if(!vertices.empty()) BFS( *vertices.begin() );
- }
- bool knapsack(int i, int b, int c) {
- if(i >= N + 1) {
- if(b == 0 && c == 0)
- return true;
- return false;
- }
- bool ret1 = false, ret2 = false;
- if(b - arrangements[i].first >= 0 && c - arrangements[i].second >= 0)
- ret1 = knapsack(i + 2, b - arrangements[i].first, c - arrangements[i].second);
- ret2 = knapsack(i + 1, b, c);
- return ret1 | ret2;
- }
- int main() {
- #ifndef ONLINE_JUDGE
- READ("input.txt");
- WRITE("output.txt");
- #endif
- int tcase, u, v, b, c, a;
- SDi(tcase);
- while(tcase--) {
- SD3(b, c, a);
- rep(i, a) SD2(u, v), adj[u].pb(v), adj[v].pb(u), vertices.insert(u), vertices.insert(v);
- memset(visited, none, sizeof visited);
- N = vertices.size();
- BFS(*vertices.begin());
- if( knapsack(0, b, c) ) {
- pf("yes\n");
- } else pf("no\n");
- rep(i, N + 10) adj[i].clear();
- arrangements.clear();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment