Codeforces 237E (最小費用最大流)

2022-05-05 21:39:09 字數 2607 閱讀 1813

很明顯的費用流,不過建圖還是卡住了。。。問的gb才知道怎麼建圖。。。

先是源點到n個串,容量是a[i],費用是0,然後是串t中包含的所有不重複字母為乙個節點,從這些節點向匯點t連邊,容量是當前字母的個數,費用是0。

然後是n個串向t中的字母連邊,容量是a[i]中當前字母的個數,費用是i。

ps:費用流模板有問題。以至於debug了好久。。。t_t

view code

//

#pragma comment(linker,"/stack:327680000,327680000")

#include #include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define cl(arr, val) memset(arr, val, sizeof(arr))

#define rep(i, n) for((i) = 0; (i) < (n); ++(i))

#define for(i, l, h) for((i) = (l); (i) <= (h); ++(i))

#define ford(i, h, l) for((i) = (h); (i) >= (l); --(i))

#define l(x) (x) << 1

#define r(x) (x) << 1 | 1

#define mid(l, r) (l + r) >> 1

#define min(x, y) (x) < (y) ? (x) : (y)

#define max(x, y) (x) < (y) ? (y) : (x)

#define e(x) (1 << (x))

#define iabs(x) (x) < 0 ? -(x) : (x)

#define out(x) printf("%i64d\n", x)

#define lowbit(x) (x)&(-x)

#define read() freopen("data.in", "r", stdin)

#define write() freopen("data.out", "w", stdout);

const

double eps = 1e-8

;typedef

long

long

ll;const

int inf = ~0u>>2

;using

namespace

std;

const

int n = 1024

;struct

node g[n*n];

ints, t;

inthead[n], t;

void

init()

void add(int u, int v, int f, int

w) int

dis[n];

intpre[n];

bool

vis[n];

queue

q;bool spfa()

q.push(s); dis[s] = 0

; vis[s] = true; pre[s] = -1

;

intu, v, w, i;

while(!q.empty()) }}

vis[u] = false

; }

return dis[t] !=inf;

}int get_flow(int& cost, int& flow)

tmp =t;

while(pre[tmp] != -1

)

//printf("%d %d\n", c, res);

cost += c; flow +=res;

}char

sst[n];

char

dic[n][n];

int hh[50], ht[50

];int

a[n], n, lent;

intsolve()

//printf("%d %d\n", flow, cost);

if(flow == lent) return

cost;

else

return -1;}

void

build()

for(i = 1; i <= 26; ++i)

}for(i = 1; i <= n; ++i)

for(i = 1; i <= n; ++i)

for(j = 1; j <= 26; ++j) }}

}int

main()

build();

printf(

"%d\n

", solve());

return0;

}

Codeforces 976E 題解報告

1 當把所有的倍數2 a都加到同一health上,health增加的最多 2 先計算每乙個creature的hp dmg,按該值對所有的creature排序 再求和,i include using namespace std const int n 200 1000 9 int hp n dmg n...

codeforces 1030E 暴力 思維)

題目 題意 給定一些數,可將區間 l r 中某些數的二進位制位的1的位置更換,使得最終區間所有數異或和為0,求這樣的區間個數。思路 在那裡瞎dp了好久,wa的很徹底,借鑑了一下別人的思路。區間合法的條件是 這個區間1的個數為偶數,並且區間中二進位制位1最多的乙個數的二進位制個數小於等於和的一半。我們...

Codeforces 1270E 構造 數學

有 n 個二維平面上的點,每兩個點之間連一條線段,將這些點劃分為兩個非空的集合 a b 同乙個集合內的兩點之間線段用黃色標註,不同集合的兩點之間線段用藍色標註,使距離相同的線段顏色相同。先將所有點的座標以其中乙個點作為原點轉化一下,使其中必定有乙個點是 0,0 然後將所有點按奇偶分為四組 0代表偶數...