首先不考慮 \(d\) 的要求,可以想到乙個網路流的建圖模型:每個人當成乙個點,每種角色也當成乙個點,每個人能當某種角色就連一條容量是無窮大的邊,每個人再限制只能流1的流量進來。但是這樣跑不出答案,發現對於一種可行的流最後的答案是所有角色流量的最小值,那麼我們可以考慮二分答案,建立乙個匯點,將每種角色連向這個匯點一條容量為二分值的邊,最後如果跑滿了那麼當前二分之一就是可行的。
考慮 \(d\) 的要求,對於兩個正營再各新建乙個點,考慮源點連向這兩個點的容量。假設兩點的流量為 \(x,y\),那麼 \(x+y=m*now,|x-y|\le d\rightarrow x,y\le \frac\),其中 \(now\) 是當前二分的答案。把容量設為 \(\frac\) 即可。
但是這樣複雜度不優,無法通過此題。
我們發現每個人跟他的名字(編號)無關,之和他能當什麼角色有關,所以我們考慮將他們按角色這樣分類,這樣人數就從 \(10^4\) 降到了 \(10^3\) 級別了,可以通過此題。
另外我還發現資料的漏洞,如果從 \(n/m\) 像下列舉答案會跑得更快
using namespace std;
const int maxn = 200000;
template void read(t &x)
struct nodeedge[maxn];
int head[maxn], tot = 1;
int n, m, d, state[maxn], s, t, v1, v2, num, cnt[2][1 << 11], id[2][1 << 11], d[maxn], cur[maxn];
queueq;
bool bfs(int s, int t)
} return d[t] > 0;
}int dinic(int x, int t, int flow)
} return flow - rest;
}int maxflow(int s, int t)
void add_edge(int u, int v, int l) ; head[u] = tot;
edge[++tot] = node; head[v] = tot;
}void change_edge(int l)
int pos[12];
void build(int ans)
void change(int ans)
bool check(int ans)
char s[15];
int main()
for (int i = 1; i < (1 << m); i++) id[0][i] = ++num;
for (int i = 1; i < (1 << m); i++) id[1][i] = ++num;
for (int j = 0; j < m; j++) pos[j] = ++num;
t = ++num;
build(0);
for (int i = n / m; i; i--)
} return 0;
}
1 1 系統介紹 斯納克PACS遠端會診系統
斯納克pacs遠端會診系統是由南昌斯納克網路科技 研發,擁有自主智財權的遠端醫療會診系統,本系統具有以下功能 1 基於b s構架,無須安裝客戶端,開啟瀏覽器即可訪問並操作,支援移動裝置。可在影像科室 全院 跨地域遠端閱片 會診 書寫 報告並列印 對患者授權後,患者可使用pc 移動裝置檢視自己的電子膠...
2 系統說明 斯納克綜合素質評價平台
1 適用物件廣泛 中小學校 民辦學校 培訓學校 美術學校 各類教育培訓機構!2 五大功能模組 1 學籍管理 2 成績管理 3 作業管理 美術培訓學校專用 4 學生素質評價管理 5 家校溝通 互動 管理 3 b s模式 什麼是b s模式 只要在能上網的地方,開啟瀏覽器就能訪問和使用,教師可以在家裡上網...