BZOJ 1001: [BeiJing2006] 狼抓兔子
来源:互联网 发布:华为荣耀8数据 编辑:程序博客网 时间:2024/06/10 07:53
利用平面图的性质把最小割转化为最短路问题,大概是这样的:
太菜了。。。先是数组开太大,中间dijkstra的pair还写反了(捂脸)
/************************************************************** Problem: 1001 User: will7101 Language: C++ Result: Accepted Time:1912 ms Memory:95340 kb****************************************************************/ #include <cstdio>#include <algorithm>#include <cstring>#include <utility>#include <queue>using namespace std; typedef long long ll; const int MAXV = 2200000, MAXE = 6600000, INF = 0x3f3f3f3f;struct edge{int to, cost, next; } es[MAXE];int head[MAXV], E, V, N, M, s, e; void init(){ memset(head, -1, sizeof(head));} inline void add2(const int &a, const int &b, const int &cost){ es[E] = (edge) {b, cost, head[a]}; head[a] = E++; es[E] = (edge) {a, cost, head[b]}; head[b] = E++;} int d[MAXV]; int dijkstra(int s, int e){ typedef pair<int, int> P; priority_queue<P, vector<P>, greater<P> > que; memset(d, 0x3f, sizeof(d)); d[s] = 0; que.push(P(0, s)); while(!que.empty()){ P p = que.top(); que.pop(); int u = p.second; if(p.first > d[u]) continue; for(int i = head[u]; i != -1; i = es[i].next){ int v = es[i].to; if(d[v] > d[u] + es[i].cost){ d[v] = d[u] + es[i].cost; que.push(P(d[v], v)); } } } return d[e];} /* int SPFA(int s, int e){ queue<int> que; memset(d, 0x3f, sizeof(d)); d[s] = 0; que.push(s); vis[s] = true; while(!que.empty()){ int u = que.front(); que.pop(); vis[u] = false; for(int i = head[u]; i != -1; i = es[i].next){ int v = es[i].to, c = es[i].cost; if(d[v] > d[u] + c){ d[v] = d[u] + c; if(!vis[v]){ que.push(v); vis[v] = true; } } } } return d[e];}*/ inline void rint(int &a){ char c; while((c = getchar()) < '0' || c > '9'); a = c - '0'; while((c = getchar()) >= '0' && c <= '9') a = (a << 3) + (a << 1) + c - '0';} void read(){ int sz = (N - 1) * (M - 1), c; s = sz * 2; e = s + 1; for(int i = 0; i < M - 1; i++){ rint(c); add2(s, i, c); } for(int i = 1; i < N - 1; i++){ for(int j = 0; j < M-1; j++){ rint(c); add2(sz + (i - 1) * (M - 1) + j, i * (M - 1) + j, c); } } for(int i = 0; i < M - 1; i++){ rint(c); add2(sz + (N - 2) * (M - 1) + i, e, c); }//========================================================== for(int i = 0; i < N - 1; i++){ rint(c); add2(e, sz + i * (M - 1), c); for(int j = 0; j < M - 2; j++){ scanf("%d", &c); add2(i * (M - 1) + j, sz + i * (M - 1) + j + 1, c); } rint(c); add2(i * (M - 1) + M - 2, s, c); } for(int i = 0; i < N - 1; i++){ for(int j = 0; j < M - 1; j++){ rint(c); add2(i * (M - 1) + j, sz + i * (M - 1) + j, c); } }} int main(){// freopen("in.txt", "r", stdin); scanf("%d%d", &N, &M); if(N == 1 && M == 1){ printf("0\n"); return 0; } if(N == 1){ int ans = INF, c; for(int i = 0; i < M - 1; i++){ scanf("%d", &c); if(ans > c) ans = c; } printf("%d\n", ans); return 0; } if(M == 1){ int ans = INF, c; for(int i = 0; i < N - 1; i++){ scanf("%d", &c); if(ans > c) ans = c; } printf("%d\n", ans); return 0; } init(); read(); printf("%d\n", dijkstra(s, e)); return 0;}
0 0
- bzoj 1001: [BeiJing2006]狼抓兔子
- BZOJ 1001: [BeiJing2006]狼抓兔子
- bzoj 1001: [BeiJing2006]狼抓兔子
- bzoj 1001: [BeiJing2006]狼抓兔子
- BZOJ 1001: [BeiJing2006] 狼抓兔子
- BZOJ 1001: [BeiJing2006]狼抓兔子
- BZOJ 1001 [BeiJing2006]狼抓兔子
- BZOJ-1001 [BeiJing2006]狼抓兔子
- [BZOJ]1001: [BeiJing2006]狼抓兔子
- 【BZOJ】1001: [BeiJing2006]狼抓兔子
- BZOJ 1001 [BeiJing2006] 狼抓兔子
- BZOJ 1001: [BeiJing2006]狼抓兔子
- bzoj 1001: [BeiJing2006]狼抓兔子
- BZOJ 1001: [BeiJing2006]狼抓兔子
- BZOJ 1001: [BeiJing2006]狼抓兔子
- BZOJ 1001 [BeiJing2006]狼抓兔子
- BZOJ 1001: [BeiJing2006]狼抓兔子
- 【bzoj 1001】 狼抓兔子 [BeiJing2006]
- AWS 构建个人网站(2)
- 【 bzoj 1500 】NOI2005 维修序列 - 平衡树乱搞 treap
- POJ 3126 -- 素数判定(埃氏筛法)+BFS
- MySQL 存储过程 批量插入
- 个人笔记 asp 07 替换函数
- BZOJ 1001: [BeiJing2006] 狼抓兔子
- MongoDB_排序
- hdu 1233 还是畅通工程(最小生成树)
- nefuoj-904:删数问题
- Fatal signal 11 (SIGSEGV)
- js引擎garbage collection的问题
- 个人笔记 asp 08 asp设置保留小数点后两位
- hdu 1875 畅通工程再续(最小生成树)
- 关于白噪声的理解