很明顯的費用流,不過建圖還是卡住了。。。問的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代表偶數...