題意:
給出乙個有向圖,問求乙個迴路,使得回路上的點權之和/邊權之和最大。
題解:01分數規劃,簡單構造,將點權轉移到邊權上~因為乙個環上的點和邊的數量是相等的~
設i,j之間初始邊權為w[i][j],修改後的邊權為g[i][j],則g[i][j]=w[i][j]*mid+val[i]
spfa判負環即可~
01分數規劃詳見:
**包含bfs版spfa和dfs版spfa兩種版本
dfs版spfa真是快,16ms,在c++裡耗時排第一,嘿嘿~
view code
1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 78#define n 1100
9#define m 1000100
1011
using
namespace
std;
1213
inta[m],b[m];
14int
head[n],next[m],to[m];
15int q[m*5
],im[n];
16int
vis[n];
17int
n,cnt,m,st;
18double
l,r,mid,c[m],dis[n],len[m],val[n];
1920 inline void add(int u,int v,double
w)21
2425 inline void
read()
2634}35
/*queue版spfa
36inline bool spfa()
3747
while(h!=t)
4860}61
}62return false;63}
64*/
6566 inline bool dfs(int
u)67
76 vis[u]=0;77
return
false;78
}79//dfs-spfa找負環
80 inline bool
spfa()
8187
88 inline void
go()
8997 printf("
%.2lf\n
",mid);98}
99100
intmain()
101
POJ 2976 01分數規劃
剛做完了最優比率生成樹 就瞬間來了感覺了 題目大意就 給定n個二元組 a,b 扔掉k個二元組,使得剩下的a元素之和與b元素之和的比率最大 題目求的是 max a i x i b i x i 其中a,b都是一一對應的。x i 取0,1 並且 x i n k 那麼可以轉化一下。令r a i x i b ...
POJ2976 0 1分數規劃
include include include include using namespace std const int maxn 1000 5 const double eps 1e 7 struct node n maxn bool cmp node u,node v int n,k bool...
POJ 2976 01分數規劃基礎題目
題意 給你一組 數 一共n個,每個數有兩個權值,價錢a i 代價b i 讓你選擇n k使得 sigma a i sigma b i 100 最大 思路 毫無疑問這個是01分數規劃的最進本形式,唯一的限制就是取個數,那麼我們直接sort以下,取出來就行了。沒啥解釋的,這個是自己的第乙個01分數規劃,一...