hdu5988 2016icpc青岛站 G题 Coding Contest

2024-01-29 12:58

本文主要是介绍hdu5988 2016icpc青岛站 G题 Coding Contest,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目链接 点击打开链接


比赛的时候T了两个小时也没出来。。。本来以为是模板的锅,然而下来用zkw还是T出翔,发现真的是eps的锅。。。还有就是把乘利用对数变成加。。。(神技)


题目意思大概是给你n个块,每一个块里面有s[i]个acmer,有b[i]份食物,到了午饭时间,所有人都要吃午饭,但是每一个块里的食物有限,所以他们要移动到其他块里,但是路上有网线,每走一次就有p的概率把网线碰断,导致网络奔溃(某条路第一次走的时候一定不会被破坏)。


#include<cmath>
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
#include<queue>
using namespace std;const int MAXN=300;
const int MAXE=100000;
const int INF=2e9;
const double eps = 1e-8;
struct Edge
{int from;int to;int next;int re;//记录逆边的下标int cap;//容量double cost;//费用
}edge[MAXE];
int pre[MAXN];
int head[MAXN];
bool vis[MAXN];
int que[MAXN];
double dist[MAXN];
int tol;//边的总数
void add(int u,int v,int ca,double co)
{edge[tol].from=u;edge[tol].to=v;edge[tol].cap=ca;edge[tol].cost=co;edge[tol].re=tol+1;edge[tol].next=head[u];head[u]=tol++;edge[tol].from=v;//加逆边edge[tol].to=u;edge[tol].cap=0;edge[tol].cost=-co;edge[tol].re=tol-1;edge[tol].next=head[v];head[v]=tol++;
}
int N;
int start;
int T;
bool SPFA()
{int front=0,rear=0;for(int v=0;v<=N;v++){if(v==start){que[rear++]=v;vis[v]=true;dist[v]=0;}else{dist[v]=INF;vis[v]=false;}}memset(pre,-1,sizeof(pre));while(front!=rear){int u=que[front++];vis[u]=false;if(front>=MAXN)front=0;for(int i=head[u];i!=-1;i=edge[i].next){int v=edge[i].to;if(edge[i].cap&&dist[v]-dist[u]-edge[i].cost > eps){dist[v]=dist[u]+edge[i].cost;pre[v]=i;if(!vis[v]){que[rear++]=v;vis[v]=true;if(rear>=MAXN)rear=0;}}}}if(pre[T] == -1)return false;return true;
}
double c;//费用
int f;//最大流void minCostMaxflow()
{f=0;c = 0;int u,p;while(SPFA()){int Min=INF;for(u=T;u!=start;u=edge[p].from){p=pre[u];Min=min(Min,edge[p].cap);}for(u=T;u!=start;u=edge[p].from){p=pre[u];edge[p].cap-=Min;edge[edge[p].re].cap+=Min;}c+=dist[T]*Min;f+=Min;}
}struct node
{int x,y,z;
}a[110];
int main()
{int t,n,m,i;scanf("%d",&t);while(t--){scanf("%d%d",&n,&m);for(i=1;i<=n;i++){scanf("%d%d",&a[i].x,&a[i].y);a[i].z = a[i].x - a[i].y;}start=0;N=n+1;T=n+1;tol=0;memset(head,-1,sizeof(head));for(i=1;i<=m;i++){int x,y,c;double p;scanf("%d%d%d%lf",&x,&y,&c,&p);p = -log2(1.0-p);if(c > 0)add(x,y,1,0);if(c - 1 > 0)add(x,y,c-1,p);}for(int i=1;i<=n;i++){if(a[i].z > 0)add(start,i,a[i].z,0);else if(a[i].z < 0)add(i,T,-a[i].z,0);}minCostMaxflow();double ans = 1 - pow(2,-c);printf("%.2f\n",ans);}return 0;
}


这篇关于hdu5988 2016icpc青岛站 G题 Coding Contest的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/656983

相关文章

2014 Multi-University Training Contest 8小记

1002 计算几何 最大的速度才可能拥有无限的面积。 最大的速度的点 求凸包, 凸包上的点( 注意不是端点 ) 才拥有无限的面积 注意 :  凸包上如果有重点则不满足。 另外最大的速度为0也不行的。 int cmp(double x){if(fabs(x) < 1e-8) return 0 ;if(x > 0) return 1 ;return -1 ;}struct poin

2014 Multi-University Training Contest 7小记

1003   数学 , 先暴力再解方程。 在b进制下是个2 , 3 位数的 大概是10000进制以上 。这部分解方程 2-10000 直接暴力 typedef long long LL ;LL n ;int ok(int b){LL m = n ;int c ;while(m){c = m % b ;if(c == 3 || c == 4 || c == 5 ||

2014 Multi-University Training Contest 6小记

1003  贪心 对于111...10....000 这样的序列,  a 为1的个数,b为0的个数,易得当 x= a / (a + b) 时 f最小。 讲串分成若干段  1..10..0   ,  1..10..0 ,  要满足x非递减 。  对于 xi > xi+1  这样的合并 即可。 const int maxn = 100008 ;struct Node{int

AtCoder Beginner Contest 370 Solution

A void solve() {int a, b;qr(a, b);if(a + b != 1) cout << "Invalid\n";else Yes(a);} B 模拟 void solve() {qr(n);int x = 1;FOR(i, n) FOR(j, i) qr(a[i][j]);FOR(i, n) x = x >= i ? a[x][i]: a[i][x];pr2(

CF Bayan 2015 Contest Warm Up B.(dfs+暴力)

B. Strongly Connected City time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output 题目链接: http://codeforces.com/contest/475/probl

CF Bayan 2015 Contest Warm Up A.(模拟+预处理)

A. Bayan Bus time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output 题目链接: http://codeforces.com/contest/475/problem/A The fi

AtCoder Beginner Contest 369 D - Bonus EXP 动态规划

原题链接: https://atcoder.jp/contests/abc369/tasks/abc369_d 思路:   这道题为什么要用动态规划呢,其实,对于第i个怪物,我们有打与不打两种处理方式,而对于打,我们是获得两倍的经验值,还是一倍的经验值,与我们打了奇数只怪物还是打了偶数只怪物有关了,因此我们定义dp[i][0] 为前i只怪物总共打了偶数次,dp[i][1] 为前i只怪物总

青岛实训 8月22号 day34

一、回顾 1.主从复制(高可用) 2.传统的主从复制 3.gtids事务型的主从复制 4.注意 1)server_id唯一 2)8.X版本需要get_ssl_pub_key 3)5.X不需要 4)change master to 5)stop | start slave 5.非交互 import pymysql conn=pymysql.connect(host=xxx,user=xxx,pa

2015 Multi-University Training Contest 5 1009 MZL#39;s Border

MZL's Border  Problem's Link:  http://acm.hdu.edu.cn/showproblem.php?pid=5351   Mean:  给出一个类似斐波那契数列的字符串序列,要你求给出的f[n]字符串中截取前m位的字符串s中s[1...i] = s[s.size()-i+1....s.size()]的最大长度。 analyse:   过计算

【UVa】10600 ACM Contest and Blackout 次小生成树

类型:次小生成树 题目大意: 为了举办ACM竞赛,市长决定给所有的n(3 <= n <= 100)所学校提供可靠的电力供应。当且仅当一个学校直接连到电站,或者连到另一个有可靠供应的学校时,才有可靠供应。现在给出在不同学校之间的布线成本,找出最便宜的两种连线方案。一个方案的成本等于其中所有学校之间连线的成本的总和。 题目分析: 次小生成树。 先求出最小生成树,然后枚举所有不在