UESTC OJ1220(最短路)
来源:互联网 发布:监控组态软件 编辑:程序博客网 时间:2024/05/16 11:40
南阳CCPC的F题,题意是有m个战场,n个小镇,曹操可以在第i个小镇调人到x[i]战场,每个人花费c[i]金钱,同时袁绍也会在第i个小镇调同等数量的人到y[i]战场。每个战场有重要程度分别为0,1,2 。2表示战场上曹操的人必须比袁绍多,1表示曹操的人必须大于等于袁绍,0表示没有限制。问满足条件曹操必须至少花费多少。
首先建模,只需要保证每个重要战场曹操的人数多一个就行,那么对于每个小镇,从y[i]连过来一条费用为0的边,向x[i]连一条费用为c[i]的边,建立一个超级源点连向所有的不重要战场。把所有的重要战场的最短路加起来就是答案。
注意INF需要开到10^10以上。
#include <bits/stdc++.h>using namespace std;#define maxn 3111111#define INF 11111111111111int n, m, cnt, head[maxn];int val[maxn], x[maxn], y[maxn];long long c[maxn], d[maxn];struct node { int to, next; long long w;}edge[maxn];void add_edge (int from, int to, long long w, int i) { node &e = edge[i]; e.to = to, e.next = head[from], e.w = w, head[from] = i;}bool vis[maxn];bool spfa (int start) { memset (vis, 0, sizeof vis); for (int i = 0; i <= n+m; i++) d[i] = INF; vis[start] = 1; d[start] = 0; queue <int> q; while (!q.empty ()) q.pop (); q.push (start); while (!q.empty ()) { int u = q.front (); q.pop (); vis[u] = 0; for (int i = head[u]; i != -1; i = edge[i].next) { int v = edge[i].to; if (d[v] > d[u]+edge[i].w) { d[v] = d[u]+edge[i].w; if (!vis[v]) { vis[v] = 1; q.push (v); } } } } return 1;}int main () { //freopen ("in", "r", stdin); ios::sync_with_stdio(false); int t, kase = 0; cin >> t; while (t--) { printf ("Case #%d: ", ++kase); cin >> n >> m; cnt = 0; memset (head, -1, sizeof head); for (int i = 1; i <= n; i++) { cin >> x[i]; } for (int i = 1; i <= n; i++) { cin >> y[i]; } for (int i = 1; i <= n; i++) { cin >> c[i]; } for (int i = 1; i <= m; i++) { //scanf ("%d", &val[i]); cin >> val[i]; } for (int i = 1; i <= n; i++) { add_edge (y[i]+n, i, 0, cnt++); add_edge (i, x[i]+n, c[i], cnt++); } for (int i = 1; i <= m; i++) { if (!val[i]) { add_edge (0, i+n, 0, cnt++); } } spfa (0); long long ans = 0; for (int i = 1; i <= m; i++) { if (val[i] == 2) { if (d[i+n] == INF) { printf ("-1\n"); goto out; } else ans += d[i+n]; } } printf ("%lld\n", ans); out: ; } return 0;}
0 0
- UESTC OJ1220(最短路)
- UESTC 30 最短路
- 【带修改的最短路】【floyd】War UESTC 1322
- UESTC - 835 The Shortest Path in Nya Graph(最短路)
- HDU 4370 0 or 1(12年多校by uestc 0/1规划,最短路)
- (CCPC F题)UESTC 1220 The Battle of Guandu (最短路)
- 最短路,前缀和优化连边,Dijkstra(UESTC 482,Charitable Exchange)
- 最短路 & 次短路
- 最短路
- 最短路
- 最短路
- 最短路
- 最短路
- 最短路
- 最短路
- 最短路
- 最短路
- 最短路
- 微信开发中signature的验证,文本消息回复,单图文消息回复,多图文消息回复
- stringstream 的.str()正确用法和清空操作
- 1、Java概述及Dos常用命令
- timer使用思考
- HDU 1800 Flying to the Mars // Trie
- UESTC OJ1220(最短路)
- MySQL安装(转)
- 数据结构1---概念初识
- appium第一次连接ios真机,运行测试用例
- 事务
- Linux下设置Java环境变量的几种方法
- Redis使用与实践
- [Leetcode]Construct Binary Tree from Preorder and Inorder Traversal
- Redis配置文件详解