资讯 小学 初中 高中 语言 会计职称 学历提升 法考 计算机考试 医护考试 建工考试 教育百科
栏目分类:
子分类:
返回
空麓网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
空麓网 > 计算机考试 > 面试经验 > 面试问答

zoj 3517 Tower VII

面试问答 更新时间: 发布时间: 计算机考试归档 最新发布

zoj 3517 Tower VII

#include <map>#include <cstdio>#include <vector>#include <string>#include <numeric>#include <utility>#include <algorithm>#include <functional>using namespace std;const int MAXN = 10086;map<string, int> mp;int getId(const string& s) {if (mp.count(s) == 0) {mp.insert(make_pair(s, (int)mp.size()));}return mp[s];}int m, p[MAXN], q[MAXN];vector<int> c[MAXN], u[MAXN], d[MAXN];void gaod(int v) {d[v].clear();if (c[v].empty()) {d[v].push_back(0);} else {for (int i = 0; i < (int)c[v].size(); ++i) {gaod(c[v][i]);}}if (p[v] != -1) {static int a[MAXN], b[MAXN];int x = transform(d[v].begin(), min(d[v].begin() + m, d[v].end()), a,bind2nd(minus<int>(), q[v])) - a;int y = copy(d[p[v]].begin(), d[p[v]].end(), b) - b;d[p[v]].clear();merge(a, a + x, b, b + y,insert_iterator<vector<int> >(d[p[v]], d[p[v]].end()));if ((int)d[p[v]].size() > m + m) {d[p[v]].resize(m + m);}}}void gaou(int v) {u[v].clear();if (p[v] != -1) {static int a[MAXN], b[MAXN];int x = transform(d[v].begin(), min(d[v].begin() + m, d[v].end()), a,bind2nd(minus<int>(), q[v])) - a;int y = set_difference(d[p[v]].begin(), d[p[v]].end(), a, a + x, b) - b;merge(u[p[v]].begin(), u[p[v]].end(), b, b + y,insert_iterator<vector<int> >(u[v], u[v].end()));if ((int)u[v].size() > m) {u[v].resize(m);}transform(u[v].begin(), u[v].end(), u[v].begin(), bind2nd(minus<int>(), q[v]));}for (int i = 0; i < (int)c[v].size(); ++i) {gaou(c[v][i]);}}int main() {int n, x, y, z, ans;char buf[80];while (scanf("%d%d", &n, &m) != EOF) {mp.clear();for (int i = 0; i < n; ++i) {p[i] = -1;c[i].clear();}for (int i = 1; i < n; ++i) {scanf("%s", buf);x = getId(buf);scanf("%s", buf);y = getId(buf);scanf("%d", &z);p[x] = y;q[x] = z;c[y].push_back(x);}x = -1;for (int i = 0; i < n; ++i) {if (p[i] == -1) {x = i;}}gaod(x);gaou(x);ans = 0;for (int i = 0; i < n; ++i) {static int a[MAXN];if (merge(d[i].begin(), d[i].end(), u[i].begin(), u[i].end(), a) - a >= m) {ans = min(ans, accumulate(a, a + m, 0));}}printf("%dn", -ans);}return 0;}
转载请注明:文章转载自 http://www.konglu.com/
本文地址:http://www.konglu.com/it/377655.html
免责声明:

我们致力于保护作者版权,注重分享,被刊用文章【zoj 3517 Tower VII】因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理,本文部分文字与图片资源来自于网络,转载此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们,情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!

我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2023 成都空麓科技有限公司

ICP备案号:蜀ICP备2023000828号-2