企业营销网站建设公司哪家好营销软文是什么意思
企业营销网站建设公司哪家好,营销软文是什么意思,小程序搭建公司,windows 做网站服务器吗题干#xff1a;
链接#xff1a;https://ac.nowcoder.com/acm/contest/369/F 来源#xff1a;牛客网
题目描述
现在你有 n 把灵剑#xff0c;其中选择第i把灵剑会得到的 wiw_iwi 攻击力。
于此同时#xff0c;还有q个约束#xff0c;每个约束形如#xff1a;
…题干
链接https://ac.nowcoder.com/acm/contest/369/F 来源牛客网
题目描述
现在你有 n 把灵剑其中选择第i把灵剑会得到的 wiw_iwi 攻击力。
于此同时还有q个约束每个约束形如
x 和 y 表示两个物品的编号如果同时选中可以获得额外 v0v_0v0 的攻击力 同时不选可以获得额外 v1v_1v1 点攻击力只选择一个则会扣除 v2v_2v2 的攻击力。
王小D想知道剑阵的最大攻击力。
九州大陆的未来必有灵剑山的一笔
输入描述: 第一行两个整数 n, q n表示灵剑数量q表示约束数量。
接下来一行共 n 个整数第 i 个整数表示 wiw_iwi。
接下来 q 行每行五个整数表示一个约束。
输出描述:
共一行输出最大的攻击力。
示例1
输入
复制
5 2
4 2 6 6 2
4 2 4 2 2
5 1 6 6 4
输出
复制
30
说明
5把灵剑都选 获得426624630的攻击力
备注:
且 均为偶数。
数据保证对于任一无序对(x,y)只会有一个约束。
解题报告 还是看官方题解吧、、、但是注意构造的权值不能出现负数也不知道为什么。可能是因为不然不能放到网络流里面跑吧
另外注意这题不能直接上来就加st到i的边和i到ed的边因为你这样的话w[i]会被计算多次不符合定义式因为你需要他只被选择一次的。 AC代码
#includecstring
#includecstdio
#includealgorithm
#includeiostream
#define ll long long
using namespace std;
int n,Q;
int tot;
struct Edge {int to,ne;ll w;
} e[100005 * 2];
int head[10005];
int st,ed;
int dis[10050],q[10005];//一共多少个点跑bfsdis数组和q数组就开多大。
void add(int u,int v,ll w) {e[tot].tov; e[tot].ww; e[tot].nehead[u]; head[u]tot;e[tot].tou; e[tot].w0; e[tot].nehead[v]; head[v]tot;
}
bool bfs(int st,int ed) {memset(dis,-1,sizeof(dis));int front0,tail0;q[tail]st;dis[st]0;while(fronttail) {int cur q[front];if(cur ed) return 1;front;for(int i head[cur]; i!-1; i e[i].ne) {if(e[i].wdis[e[i].to]0) {q[tail]e[i].to;dis[e[i].to]dis[cur]1;}}}if(dis[ed]-1) return 0;return 1;
}
ll dfs(int cur,ll limit) {//limit为源点到这个点的路径上的最小边权 if(limit0||cured) return limit;ll w,flow0;for(int i head[cur]; i!-1; i e[i].ne) { if(e[i].wdis[e[i].to]dis[cur]1) {wdfs(e[i].to,min(limit,e[i].w));e[i].w-w;e[i^1].ww;floww;limit-w;if(limit0) break;}}if(!flow) dis[cur]-1;return flow;
}
ll dinic() {ll ans 0;while(bfs(st,ed)) ansdfs(st,0x7fffffffff);return ans;
}
ll w[100005];
ll W[100005],W2[100005];
int main()
{int Q;cinnQ;stn1,edst1; tot1;for(int i 0; ied; i) head[i] -1;ll sum 0,v0,v1,v2,a,b,c,d,e,f;int x,y;for(int i 1; in; i) scanf(%lld,wi),sum w[i];while(Q--) {scanf(%d%d%lld%lld%lld,x,y,v0,v1,v2);sum v0v1;abv1/2;cd(v0v1)/2v2;fv0/2;ev0/2;W[x]a;W[y]b;W2[x]e;W2[y]f;//add(st,x,a); add(st,y,b); add(x,y,c); add(y,x,d); //add(x,ed,e); add(y,ed,f);}for(int i 1; in; i) add(st,i,W[i]),add(i,ed,w[i]W2[i]);printf(%lld\n,sum - dinic()); return 0;
}
/*
4 2
1 1 1 1
1 2 4 8 2
2 3 6 8 10
*/
不知道为什么还可以这样建图贴一发别人的代码有空再研究吧
#include bits/stdc.h
using namespace std;
typedef long long ll;
const int N 2e7 10;
int head[N], rest[N], to[N], flow[N], tot 1;
void sig(int u, int v, int w) {to[ tot] v, flow[tot] w, rest[tot] head[u], head[u] tot;
}
void add(int u, int v, int w) {sig(u, v, w), sig(v, u, 0);
}
int n, m, cnt, dis[N], S, T; ll ans;
int bfs() {for(int i 1 ; i cnt ; i) dis[i] -1;queueint q;q.push(S), dis[S] 1;while(q.size()) {int u q.front(); q.pop();for(int i head[u] ; i ; i rest[i]) {int v to[i];if(dis[v] -1 flow[i]) {dis[v] dis[u] 1;q.push(v);}}}return dis[T] ! -1;
}
int dfs(int u, int f) {if(u T || !f) return f;int use 0;for(int i head[u] ; i ; i rest[i]) {int v to[i];if(flow[i] dis[v] dis[u] 1) {int a dfs(v, min(f - use, flow[i]));flow[i] - a, flow[i ^ 1] a;use a;if(use f) break;}}if(!use) dis[u] -1;return use;
}
int main() {scanf(%d%d, n, m);S cnt, T cnt;for(int i 1, a, b ; i n ; i) {scanf(%d, b);a0;int x cnt;add(S, x, a);add(x, T, b);ans a b;}for(int i 1, u, v, a, b, c ; i m ; i) {scanf(%d%d%d%d%d, u, v, b, a, c);u 2, v 2;int x cnt, y cnt;add(S, x, a); add(x, u, a); add(x, v, a);add(u, y, b); add(v, y, b); add(y, T, b);add(u, v, c); add(v, u, c);ans a b;}while(bfs()) {ans - dfs(S, 0x3f3f3f3f);}printf(%lld\n, ans);
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/88761.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!