#include <cstdio> #include <vector> using namespace std; int n; vector<int> visit, d, a, magic; bool dfs(long long z, int u) { int i; // printf("DEBUG(%d,%d); d=%d; a=%d;\n", z, u, d[u], a[u]); if (u!=-1) { if (visit[u]) { for (i=0; i<n; i++) if (!visit[i]) { // printf("DBG%d\n", i); return false; } return true; } if (z<=d[u]) return false; z+=a[u]-d[u]; visit[u]=1; } bool well=false; for (i=0; i<n; i++) well=(well || dfs(z,i)); if (u!=-1) { visit[u]=0; if (well) magic.push_back(u+1); } else { if (well) { puts("TAK"); for (i=magic.size()-1; i>0; i--) printf("%d ", magic[i]); if (magic.size()!=0) printf("%d\n", magic[i]); } else puts("NIE"); } return well; } int main() { int i, z; scanf("%d%d", &n, &z); a.resize(n); d.resize(n); visit.resize(n); for (i=0; i<n; i++) { visit[i]=0; scanf("%d%d", &d[i], &a[i]); } dfs(z,-1); return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | #include <cstdio> #include <vector> using namespace std; int n; vector<int> visit, d, a, magic; bool dfs(long long z, int u) { int i; // printf("DEBUG(%d,%d); d=%d; a=%d;\n", z, u, d[u], a[u]); if (u!=-1) { if (visit[u]) { for (i=0; i<n; i++) if (!visit[i]) { // printf("DBG%d\n", i); return false; } return true; } if (z<=d[u]) return false; z+=a[u]-d[u]; visit[u]=1; } bool well=false; for (i=0; i<n; i++) well=(well || dfs(z,i)); if (u!=-1) { visit[u]=0; if (well) magic.push_back(u+1); } else { if (well) { puts("TAK"); for (i=magic.size()-1; i>0; i--) printf("%d ", magic[i]); if (magic.size()!=0) printf("%d\n", magic[i]); } else puts("NIE"); } return well; } int main() { int i, z; scanf("%d%d", &n, &z); a.resize(n); d.resize(n); visit.resize(n); for (i=0; i<n; i++) { visit[i]=0; scanf("%d%d", &d[i], &a[i]); } dfs(z,-1); return 0; } |