题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6749

(占个坑,有空再更新题解)
Dinic:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;struct forward_star{int next,to,w;};int t;int n,m,k;int x[7];int y[7];int z[7];int a[72][72];int f[64];bool vis[72];int head[72];int dist[72];int que[72];forward_star edge[10369];int cnt;
int abs(int x)
{if (x < 0)return (-x);else return x;
}
bool bfs(int now)
{memset(dist,0,sizeof(dist));memset(vis,0,sizeof(vis));vis[now] = true;int f = 1;int t = 1;que[1] = now;while (f <= t){int now = que[f];int i = head[now];while (i){if (edge[i].w && !vis[edge[i].to]){vis[edge[i].to] = true;dist[edge[i].to] = dist[now] + 1;que[++t] = edge[i].to;}i = edge[i].next;}f ++;}return dist[71];
}
int dfs(int now,int delta)
{int tot = 0;if (now == 71)return delta;int i = head[now];while (i){if (edge[i].w && dist[edge[i].to] == dist[now] + 1){int temp = dfs(edge[i].to,min(delta - tot,edge[i].w));if (temp){tot += temp;edge[i].w -= temp;edge[i ^ 1].w += temp;}if (tot == delta)return delta;}i = edge[i].next;}return tot;
}
void add(int u,int v,int w)
{cnt ++;edge[cnt].to = v;edge[cnt].w = w;edge[cnt].next = head[u];head[u] = cnt;cnt ++;edge[cnt].to = u;edge[cnt].w = 0;edge[cnt].next = head[v];head[v] = cnt;
}
bool check(int t)
{cnt = 1;memset(head,0,sizeof(head));memset(f,0,sizeof(f));for (int i = 1;i <= n;i ++)for (int j = 1;j <= m;j ++){int status = 0;for (int p = 1;p <= k;p ++)if (abs(i - x[p]) + abs(j - y[p]) <= t)status ^= (1 << p - 1);f[status] ++;}for (int i = 1;i <= k;i ++){add(70,i + (1 << k) - 1,z[i]);for (int j = 0;j < (1 << k);j ++)if (j & (1 << i - 1))add(i + (1 << k) - 1,j,z[i]);}for (int i = 0;i < (1 << k);i ++)add(i,71,f[i]);int ans = 0;while (bfs(70))ans += dfs(70,2147483647);if (ans != n * m)return false;else return true;
}
int main()
{scanf("%d",&t);while (t --){memset(f,0,sizeof(f));scanf("%d%d%d",&n,&m,&k);int sum = 0;for (int i = 1;i <= k;i ++){scanf("%d%d%d",&x[i],&y[i],&z[i]);sum += z[i];}if (sum < n * m){printf("-1\n");continue;}int l = 0;int r = n + m;while (l < r - 1){int mid = l + r + 1 >> 1;if (check(mid))r = mid;else l = mid + 1;}if (check(l))printf("%d\n",l);else printf("%d\n",r);}return 0;
}

FF:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;struct forward_star{int next,to,w;};int t;int n,m,k;int f[64];int x[7];int y[7];int z[7];int a[72][72];bool vis[72];int head[72];forward_star edge[10369];int cnt;
int abs(int x)
{if (x < 0)return (-x);else return x;
}
int dfs(int now,int delta)
{vis[now] = true;int tot = 0;if (now == 71){vis[now] = false;return delta;}int i = head[now];while (i){if (edge[i].w && !vis[edge[i].to]){int temp = dfs(edge[i].to,min(delta - tot,edge[i].w));if (temp){tot += temp;edge[i].w -= temp;edge[i ^ 1].w += temp;}if (tot == delta){vis[now] = false;return delta;}}i = edge[i].next;}vis[now] = false;return tot;
}
void add(int u,int v,int w)
{cnt ++;edge[cnt].to = v;edge[cnt].w = w;edge[cnt].next = head[u];head[u] = cnt;cnt ++;edge[cnt].to = u;edge[cnt].w = 0;edge[cnt].next = head[v];head[v] = cnt;
}
bool check(int t)
{memset(f,0,sizeof(f));for (int i = 1;i <= n;i ++)for (int j = 1;j <= m;j ++){int status = 0;for (int p = 1;p <= k;p ++)if (abs(i - x[p]) + abs(j - y[p]) <= t)status ^= (1 << p - 1);f[status] ++;}cnt = 1;memset(head,0,sizeof(head));for (int i = 1;i <= k;i ++){add(70,i + (1 << k) - 1,z[i]);for (int j = 0;j < (1 << k);j ++)if (j & (1 << i - 1))add(i + (1 << k) - 1,j,z[i]);}for (int i = 0;i < (1 << k);i ++)add(i,71,f[i]);int ans = 0;bool flag = false;while (!flag){flag = true;int delta = dfs(70,2147483647);if (delta){ans += delta;flag = false;}}if (ans != n * m)return false;else return true;
}
int main()
{scanf("%d",&t);while (t --){memset(f,0,sizeof(f));scanf("%d%d%d",&n,&m,&k);int sum = 0;for (int i = 1;i <= k;i ++){scanf("%d%d%d",&x[i],&y[i],&z[i]);sum += z[i];}if (sum < n * m){printf("-1\n");continue;}int l = 0;int r = n + m;while (l < r - 1){int mid = l + r + 1 >> 1;if (check(mid))r = mid;else l = mid + 1;}if (check(l))printf("%d\n",l);else printf("%d\n",r);}return 0;
}

EK:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;int t;int n,m,k;int f[64];int x[7];int y[7];int z[7];int a[72][72];int pre[72];bool vis[72];
int abs(int x)
{if (x < 0)return (-x);else return x;
}
int dfs(int now,int delta)
{vis[now] = true;if (now == 71){vis[now] = false;return delta;}for (int i = 0;i < 72;i ++)if (a[now][i] && !vis[i]){pre[i] = now;int temp = dfs(i,min(delta,a[now][i]));if (temp){vis[now] = false;return temp;}pre[i] = 0;}vis[now] = false;return 0;
}
bool check(int t)
{memset(f,0,sizeof(f));for (int i = 1;i <= n;i ++)for (int j = 1;j <= m;j ++){int status = 0;for (int p = 1;p <= k;p ++)if (abs(i - x[p]) + abs(j - y[p]) <= t)status ^= (1 << p - 1);f[status] ++;}memset(a,0,sizeof(a));for (int i = 1;i <= k;i ++){a[70][i + (1 << k) - 1] = z[i];a[i + (1 << k) - 1][70] = 0;for (int j = 0;j < (1 << k);j ++)if (j & (1 << i - 1)){a[i + (1 << k) - 1][j] = z[i];a[j][i + (1 << k) - 1] = 0;}}for (int i = 0;i < (1 << k);i ++){a[i][71] = f[i];a[71][i] = 0;}int ans = 0;bool flag = false;while (!flag){flag = true;int delta = dfs(70,2147483647);if (delta != 0){flag = false;int i = 71;while (i != 70){int nxt = pre[i];pre[i] = 0;a[nxt][i] -= delta;a[i][nxt] += delta;i = nxt;}ans += delta;}}if (ans != n * m)return false;else return true;
}
int main()
{scanf("%d",&t);while (t --){memset(f,0,sizeof(f));scanf("%d%d%d",&n,&m,&k);int sum = 0;for (int i = 1;i <= k;i ++){scanf("%d%d%d",&x[i],&y[i],&z[i]);sum += z[i];}if (sum < n * m){printf("-1\n");continue;}int l = 0;int r = n + m;while (l < r - 1){int mid = l + r + 1 >> 1;if (check(mid))r = mid;else l = mid + 1;}if (check(l))printf("%d\n",l);else printf("%d\n",r);}return 0;
}

【百度之星2020】Mosquito 解题报告相关推荐

  1. 现象级存在的百度之星2020:看百度重仓的AI人才培养计划

    "我要在这里鞠一个一百度的躬来致敬百度." 先抛开致敬对象,这样的举动无论放置在什么场合都无比的温情.这是今天百度之星大赛颁奖典礼上一个六年级的参赛小学生致谢主办方百度时的暖心真诚 ...

  2. 百度的年会游戏(解题报告)

    题目来自 计蒜客 百度年会盛况空前,每个部门的年会活动也是非常有趣.某部门的年会中进行了一个有趣的游戏:一张方桌上有四边,每边可以坐一人,每人面前摆放一排长方形木块.我们一次给四边标号,分别为玩家 1 ...

  3. 百度之星初赛(1)解题报告

    超级赛亚ACMer Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  4. 【百度之星2014~初赛(第二轮)解题报告】JZP Set

    声明 笔者近期意外的发现 笔者的个人站点 http://tiankonguse.com/ 的非常多文章被其他站点转载,可是转载时未声明文章来源或參考自 http://tiankonguse.com/  ...

  5. 2016百度之星 - 初赛(Astar Round2B)解题报告

    此文章可以使用目录功能哟↑(点击上方[+]) 被自己蠢哭,去年还能进一下复赛,今年复赛都没戏了... 链接→2016"百度之星" - 初赛(Astar Round2B)  Prob ...

  6. 2016百度之星 - 初赛(Astar Round2A)解题报告

    此文章可以使用目录功能哟↑(点击上方[+]) 有点智商捉急,第一题卡了好久,看来不服老,不服笨是不行的了...以下是本人目前的题解,有什么疑问欢迎提出 链接→2016"百度之星" ...

  7. 2014百度之星资格赛解题报告:能量变换

    QAZ的能量变换 题目描述: 魔法师百小度也有遇到难题的时候-- 现在,百小度正在一个古老的石门面前,石门上有一段古老的魔法文字,读懂这种魔法文字需要耗费大量的能量和大量的脑力. 过了许久,百小度终于 ...

  8. 2014百度之星初赛第一轮解题报告:information

    Information 时间限制: 1s 内存限制: 65536K 问题描述 军情紧急,我们需要立刻开发出一个程序去处理前线侦察兵发回的情报,并做出相应的分析.现在由你负责其中的一个子模块,你需要根据 ...

  9. NJU 2020 计算机拔尖(数学)测试 解题报告

    NJU 2020 计算机拔尖(数学)测试 解题报告 试题链接, 万分感谢 Fiddie 大佬提供试题!!! 因为要准备 2022 计算机拔尖所以稍微写了一下! 1 题目 假设有 2n2n2n 个实数 ...

最新文章

  1. LeetCode刷题记录10——434. Number of Segments in a String(easy)
  2. Metasploit AFP爆破模块afp_login
  3. Android 仿微信小视频录制
  4. Angular6错误 Service: No provider for Renderer2
  5. lightoj 1031 区间dp
  6. yo angualr-fullstatck 项目打包部署
  7. P2495-[SDOI2011]消耗战【虚树,dp】
  8. Spring IOC注解开发
  9. python图像数据是几维数据_python实现读取类别频数数据画水平条形图案例
  10. 堆积密度怎么做_seo关键词究竟应该怎么优化
  11. 【刘文彬】 Controller:EOS区块链核心控制器
  12. 【收藏】一千行 MySQL 学习笔记
  13. flex学习笔记 富文本编辑(一)-RichEditableText
  14. TSP-遗传算法求解
  15. 【转】D3DXLoadSkinMeshFromXof函数及.x在不同dx版本中
  16. CF802C Heidi and Library (hard) (网络流+最大流)
  17. 三维光学测量技术在汽车设计及零部件制造过程中的应用
  18. Flink实战(八十五):flink-sql使用(十二)Flink 与 hive 结合使用(四)Hive Read Write
  19. matlab火箭升空,火箭升空原理
  20. 推荐一位大神,手握 GitHub 16000 star

热门文章

  1. 中山大学南方学院计算机考点,诚信应考,中山大学南方学院电气与计算机工程学院在行动!...
  2. 01html基础案例实践04
  3. 【科创人】易快报创始人兼CEO马春荃:擅长自黑的改良派,创业就是带着未知跑步前进
  4. Winform DataGridView根据一列排序
  5. u校园新视野英语 视听说 读写
  6. 人物访谈 | 一位参加过 WWDC 的 iOSer
  7. 搜索引擎是如何工作的
  8. Activit跳转动画之界面上某个位置 裂开上下拉伸动画跳转
  9. 光谱预处理算法(matlab版本)
  10. 远程对linux服务器安装theano+lasagne GPU配置