TYVJ 1248 丛林探险 解题报告
2011-08-01 14:16
267 查看
就用DFS吧,然后注意剪枝和环就行,代码如下:
#include <stdio.h> #include <stdlib.h> int rode[80000], next[80000]; int time[80000], tili[80000]; int tail; int head[5000]; int n, m; int have, ans = 0xFFFFFFF; int use, tmp; int t; void add(int a, int b, int c, int d) { tili[tail] = c; time[tail] = d; rode[tail] = b; next[tail] = head[a]; head[a] = tail; tail++; } int used[5000]; void srch(int s) { int i; if(s == t){ ans = tmp; return; } for(i = head[s]; i != -1; i = next[i]){ tmp += time[i]; use += tili[i]; if(use <= have && tmp < ans && !used[rode[i]]){ used[rode[i]] = 1; srch(rode[i]); used[rode[i]] = 0; } tmp -= time[i]; use -= tili[i]; } } int main(int argc, char **argv) { int i; int a, b, c, d; int s; scanf("%d%d", &n, &m); for(i = 0; i < n; i++){ head[i] = -1; } for(i = 0; i < m; i++){ scanf("%d%d%d%d", &a, &b, &c, &d); a--, b--; add(a, b, c, d); add(b, a, c, d); } scanf("%d%d%d", &s, &t, &have); s--, t--; used[s] = 1; srch(s); if(ans == 0xFFFFFFF){ printf("-1\n"); }else{ printf("%d\n", ans); } return 0; }
相关文章推荐
- TYVJ 1058 作业调度方案 完整版 解题报告
- TYVJ 1071 LCIS 解题报告
- TYVJ 1154 买饭队列 解题报告
- TYVJ 1106 登山 解题报告
- TYVJ 1111 舞会 解题报告
- TYVJ 1119 a^n2 解题报告
- TYVJ 1059 过河 解题报告
- TYVJ 1083 分糖果 解题报告
- TYVJ 1090 母舰 解题报告
- TYVJ 1142 阶乘统计3 解题报告
- TYVJ 1062 合并傻子 解题报告
- TYVJ 1112 舞会2 解题报告
- TYVJ 1512 异或密码 解题报告
- tyvj 衡水中学60周年赛 解题报告
- POJ1248解题报告
- TYVJ上一些DP的解题报告
- TYVJ 1080 N皇后 解题报告
- TYVJ 1077 有理逼近 解题报告
- TYVJ 1089 smrtfun 解题报告
- TYVJ 1082 找朋友 解题报告