增加两个源点,一个汇点。第一个源点到第二个源点连边,权为K,然后第一个源点再连其他点(英雄点)边权各为1,然后英雄和怪物之间按照所给连边(边权为1)。
每个怪物连终点,边权为1;
#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
struct edge {
int v, w, next;
} e[200005];
int n, m, s, t, cnt = 1;
int head[100005], dep[100005], vis[100005], cur[100005];
void addedge(int u, int v, int w) {
e[++cnt].v = v;
e[cnt].w = w;
e[cnt].next = head[u];
head[u] = cnt;
e[++cnt].v=u;
e[cnt].w=0;
e[cnt].next=head[v];
head[v]=cnt;
}
bool bfs() {
queue<int> q;
memset(dep, INF, sizeof(dep));
memset(vis, 0, sizeof(vis));
memcpy(cur, head, sizeof(head));
dep[s] = 0;
vis[s] = 1;