bzoj1486

二分答案 若存在负圈则说明答案可以更优 dfs版spfa判负圈

 1 #include<bits/stdc++.h>
 2 #define clr(a,x) memset(a,x,sizeof(a))
 3 #define rep(i,l,r) for(int i=l;i<r;i++)
 4 typedef long long ll;
 5 using namespace std;
 6 int read()
 7 {
 8     char c=getchar();
 9     int ans1=0,f=1;
10     while(!isdigit(c)){
11         if(c==‘-‘) f=-1;
12         c=getchar();
13     }
14     while(isdigit(c)){
15         ans1=ans1*10+c-‘0‘;
16         c=getchar();
17     }
18     return ans1*f;
19 }
20 struct edge{
21     int to;double d,v;
22 };
23 const double esp=1e-9,inf=1e7;
24 const int maxn=3005;
25 int n,m;
26 double d[maxn];
27 bool p[maxn],flag;
28 vector<edge>e[maxn];
29 void dfs(int a)
30 {
31     p[a]=1;
32     rep(i,0,e[a].size()){
33         if(d[a]+e[a][i].v<d[e[a][i].to])
34         {
35             if(!p[e[a][i].to]){
36                 d[e[a][i].to]=d[a]+e[a][i].v;
37                 dfs(e[a][i].to);
38             }else flag=1;
39             if(flag){
40                 p[a]=0;
41                 return;
42             }
43         }
44     }
45     p[a]=0;
46 }
47 bool ok(double a)
48 {
49     clr(p,0),clr(d,0),flag=0;
50     rep(i,1,n+1){
51         rep(j,0,e[i].size()){
52             e[i][j].v=e[i][j].d-a;
53         }
54     }
55     rep(i,1,n+1){
56         dfs(i);
57         if(flag) return 1;
58     }
59     return 0;
60 }
61 double find(double l,double r)
62 {
63     if(r-l<=esp) return l;
64     double mid=(l+r)/2;
65     return ok(mid)?find(l,mid):find(mid,r);
66 }
67 int main()
68 {
69     n=read(),m=read();
70     rep(i,0,m){
71         int from=read();
72         edge ed;
73         ed.to=read();
74         scanf("%lf",&ed.d);
75         e[from].push_back(ed);
76     }
77     printf("%.8lf\n",find(-inf,inf));
78     return 0;
79 }

1486: [HNOI2009]最小圈

Time Limit: 10 Sec  Memory Limit: 64 MB
Submit: 1448  Solved: 680
[Submit][Status][Discuss]

Description

Input

Output

Sample Input

Sample Output

HINT

Source

[Submit][Status][Discuss]

时间: 2024-11-04 19:19:28

bzoj1486的相关文章

【bzoj1486】 HNOI2009—最小圈

http://www.lydsy.com/JudgeOnline/problem.php?id=1486 (题目链接) 题意:给出一张有向图,规定一个数值u表示图中一个环的权值/环中节点个数.求最小的u. Solution  尼玛今天考试题,不知道是考二分的话这真的做不出..  二分一个答案ans,这个答案可行当且仅当ans>=∑w/cnt,cnt表示环中节点个数.移项,ans*cnt-∑w>=0,而w的个数又正好等于cnt,所以最后的式子变成了: ∑i=0n(ans−w)>=0 这个式

BZOJ1486 [HNOI2009]最小圈

今年的最后一篇了呢...好伤感的说,2014年还有1h就过去了 不不不回到正题,这道题嘛~看上去好神啊! 看到此题,我们可以联想到最优比例MST,于是就有了方法: 首先二分答案ans,判断ans是否可行,那如何判断呢? 每条边边权 - ans,之后在新的图中找负环即可.(可以用dfs版的spfa) 1 /************************************************************** 2 Problem: 1486 3 User: rausen 4 L

bzoj1486【HNOI2009】最小圈

1486: [HNOI2009]最小圈 Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 1778  Solved: 827 [Submit][Status][Discuss] Description Input Output Sample Input Sample Output HINT Source 01分数规划+二分答案+spfa判负环 #include<iostream> #include<cstdio> #include<

【bzoj1486】[HNOI2009]最小圈 分数规划+Spfa

题目描述 样例输入 4 5 1 2 5 2 3 5 3 1 5 2 4 3 4 1 3 样例输出 3.66666667 题解 分数规划+Spfa判负环 二分答案mid,并将所有边权减去mid,然后再判负环,若有负环则调整下界,否则调整上界,直至上下界基本重合. 证明:显然 由于有(c+d)/(a+b+k)>(c+d)/(a+b)≥min(c/a,d/b),所以两个相交环形成的新环一定不是最优解,即答案一定是简单环. 如果存在环使得边权和/点数<mid,那么就有边权和<点数*mid. 又因

【BZOJ1486】【HNOI2009】最小圈 分数规划 dfs判负环。

链接: #include <stdio.h> int main() { puts("转载请注明出处[辗转山河弋流歌 by 空灰冰魂]谢谢"); puts("网址:blog.csdn.net/vmurder/article/details/46348771"); } 题解: 分数规划Qwq. 然而它卡判点入n次的那种spfa推断负环. 于是有了一种黑科技: 我们从枚举点 i 開始 dfs .然后扫到点 j 时.保持 i~j 这一条链上的点被标记,然后强行推

01分数规划

bzoj1486 最小圈 题目大意:求一个图内的某个环,使得sigma ai[i]/k(环上点数)最小. 思路:二分答案,如果sigma ai[i]-k*mid>0说明mid可以更大,每次判断的时候给所有边-mid,就成了判断负环的问题.这里用spfa普通的判法会tle,所以要用深搜版的spfa来判断. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #

[转载]hzwer的bzoj题单

counter: 664BZOJ1601 BZOJ1003 BZOJ1002 BZOJ1192 BZOJ1303 BZOJ1270 BZOJ3039 BZOJ1191 BZOJ1059 BZOJ1202 BZOJ1051 BZOJ1001 BZOJ1588 BZOJ1208 BZOJ1491 BZOJ1084 BZOJ1295 BZOJ3109 BZOJ1085 BZOJ1041 BZOJ1087 BZOJ3038 BZOJ1821 BZOJ1076 BZOJ2321 BZOJ1934 BZOJ

YCB 的暑期计划

前言 YCB现在很弱(TAT) 暑假有一个月,赶快狂补一下. 大概的计划如下: 首先前期会以数据结构为主,毕竟代码能力太弱,涉及内容:线段树分治.二进制分组.KD-Tree. 等数据结构做到没有智商的时候加入一波数论,内容为 杜教筛.min_25筛. 然后中途小清新一下,做一些 组合博弈与构造题. 接着继续练代码能力,顺便学一些神奇的暴力:启发式合并.dsu on tree . 然后图论也忘的差不多了,就回过头去学点新东西,大概会有spfa判负环.0/1分数规划.差分约束. 估计这个时候也没有什