HDU 4975 A simple Gaussian elimination problem.
A simple Gaussian elimination problem.
This problem will be judged on HDU. Original ID: 4975
64-bit integer IO format: %I64d Java class name: Main
However Dragon's mom came back and found what he had done. She would give dragon a feast if Dragon could reconstruct the table, otherwise keep Dragon hungry. Dragon is so young and so simple so that the original numbers in the table are one-digit number (e.g. 0-9).
Could you help Dragon to do that?
Input
There are three lines for each block. The first line contains two integers N(<=500) and M(<=500), showing the number of rows and columns.
The second line contains N integer show the sum of each row.
The third line contains M integer show the sum of each column.
Output
Sample Input
- 3
- 1 1
- 5
- 5
- 2 2
- 0 10
- 0 10
- 2 2
- 2 2
- 2 2
Sample Output
- Case #1: So simple!
- Case #2: So naive!
- Case #3: So young!
Source
- #include <iostream>
- #include <cstdio>
- #include <cstring>
- #include <queue>
- using namespace std;
- const int maxn = ;
- const int INF = 0x3f3f3f3f;
- struct arc{
- int to,flow,next;
- arc(int x = ,int y = ,int z = -){
- to = x;
- flow = y;
- next = z;
- }
- }e[];
- int head[maxn],d[maxn],cur[maxn],tot,S,T;
- bool vis[maxn],hv[maxn];
- void add(int u,int v,int flow){
- e[tot] = arc(v,flow,head[u]);
- head[u] = tot++;
- e[tot] = arc(u,,head[v]);
- head[v] = tot++;
- }
- bool bfs(){
- queue<int>q;
- memset(d,-,sizeof d);
- d[S] = ;
- q.push(S);
- while(!q.empty()){
- int u = q.front();
- q.pop();
- for(int i = head[u]; ~i; i = e[i].next){
- if(e[i].flow && d[e[i].to] == -){
- d[e[i].to] = d[u] + ;
- q.push(e[i].to);
- }
- }
- }
- return d[T] > -;
- }
- int dfs(int u,int low){
- if(u == T) return low;
- int tmp = ,a;
- for(int &i = cur[u]; ~i; i = e[i].next){
- if(e[i].flow && d[e[i].to] == d[u]+&&(a=dfs(e[i].to,min(low,e[i].flow)))){
- e[i].flow -= a;
- e[i^].flow += a;
- low -= a;
- tmp += a;
- if(!low) break;
- }
- }
- if(!tmp) d[u] = -;
- return tmp;
- }
- int dinic(){
- int ret = ;
- while(bfs()){
- memcpy(cur,head,sizeof head);
- ret += dfs(S,INF);
- }
- return ret;
- }
- bool dfs2(int u,int fa){
- if(vis[u]) return true;
- vis[u] = true;
- for(int i = head[u]; ~i; i = e[i].next)
- if(!hv[e[i].to] && e[i].flow && e[i].to != fa && dfs2(e[i].to,u)) return true;
- hv[u] = true;
- return vis[u] = false;
- }
- int main(){
- int Ts,n,m,tmp,sum,sum2,cs = ;
- scanf("%d",&Ts);
- while(Ts--){
- scanf("%d %d",&n,&m);
- memset(head,-,sizeof head);
- memset(hv,false,sizeof hv);
- sum2 = sum = S = tot = ;
- T = n + m + ;
- for(int i = ; i <= n; ++i){
- scanf("%d",&tmp);
- add(S,i,tmp);
- sum += tmp;
- for(int j = ; j <= m; ++j)
- add(i,j+n,);
- }
- for(int i = ; i <= m; ++i){
- scanf("%d",&tmp);
- add(i+n,T,tmp);
- sum2 += tmp;
- }
- if(sum == sum2){
- if(sum == dinic()){
- bool flag = false;
- memset(vis,false,sizeof vis);
- for(int i = ; i <= n; ++i)
- if(flag = dfs2(i,-)) break;
- if(flag) printf("Case #%d: So young!\n",cs++);
- else printf("Case #%d: So simple!\n",cs++);
- }else printf("Case #%d: So naive!\n",cs++);
- }else printf("Case #%d: So naive!\n",cs++);
- }
- return ;
- }
HDU 4975 A simple Gaussian elimination problem.的更多相关文章
- hdu 4975 A simple Gaussian elimination problem.(网络流,推断矩阵是否存在)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4975 Problem Description Dragon is studying math. One ...
- hdu - 4975 - A simple Gaussian elimination problem.(最大流量)
意甲冠军:要在N好M行和列以及列的数字矩阵和,每个元件的尺寸不超过9,询问是否有这样的矩阵,是独一无二的N(1 ≤ N ≤ 500) , M(1 ≤ M ≤ 500). 主题链接:http://acm ...
- hdu 4975 A simple Gaussian elimination problem 最大流+找环
原题链接 http://acm.hdu.edu.cn/showproblem.php?pid=4975 这是一道很裸的最大流,将每个点(i,j)看作是从Ri向Cj的一条容量为9的边,从源点除法连接每个 ...
- HDOJ 4975 A simple Gaussian elimination problem.
和HDOJ4888是一样的问题,最大流推断多解 1.把ISAP卡的根本出不来结果,仅仅能把全为0或者全为满流的给特判掉...... 2.在残量网络中找大于2的圈要用一种类似tarjian的方法从汇点開 ...
- hdu4975 A simple Gaussian elimination problem.(正确解法 最大流+删边判环)(Updated 2014-10-16)
这题标程是错的,网上很多题解也是错的. http://acm.hdu.edu.cn/showproblem.php?pid=4975 2014 Multi-University Training Co ...
- A simple Gaussian elimination problem.(hdu4975)网络流+最大流
A simple Gaussian elimination problem. Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65 ...
- A simple Gaussian elimination problem.
hdu4975:http://acm.hdu.edu.cn/showproblem.php?pid=4975 题意:给你一个n*m的矩阵,矩阵中的元素都是0--9,现在给你这个矩阵的每一行和每一列的和 ...
- hdu4975 A simple Gaussian elimination problem.(最大流+判环)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4975 题意:和hdu4888基本一样( http://www.cnblogs.com/a-clown/ ...
- hdu 4972 A simple dynamic programming problem(高效)
pid=4972" target="_blank" style="">题目链接:hdu 4972 A simple dynamic progra ...
随机推荐
- Cocos2dx 小技巧(十五)话说ScrollView的delegate实现过程
附:本文參加了CSDN博客大赛.亲假设认为这篇文章不错,就大胆的来投上一票吧! !!http://vote.blog.csdn.net/Article/Details? articleid=34140 ...
- Codeforces Round #249 (Div. 2) (模拟)
C. Cardiogram time limit per test 1 second memory limit per test 256 megabytes input standard input ...
- Android4.2.2下Stagefright下OMX编解码器组件的控制流
本文均属自己阅读源代码的点滴总结.转账请注明出处谢谢. 欢迎和大家交流. qq:1037701636 email:gzzaigcn2012@gmail.com Android源代码版本号Version ...
- BAPC2014 K&&HUNNU11591:Key to Knowledge(中途相遇法)
题意: 有N个学生.有M题目 然后相应N行分别有一个二进制和一个整数 二进制代表该同学给出的每道题的答案.整数代表该同学的答案与标准答案相符的个数 要求推断标准答案有几个,假设标准答案仅仅有一种.则输 ...
- 解决VMware Pro 14安装Linux镜像时黑屏问题
软件及版本: VMware-workstation-full-14.0.0-6661328 CentOS-6.8-x86_64-bin-DVD1 系统: win10 问题: 启动虚拟机,配置完cent ...
- [HAOI2007]理想的正方形 单调队列 暴力
Code: #include<cstdio> #include<queue> #include<algorithm> using namespace std; #d ...
- 使用 init-runonce脚本创建一个 openstack云项目
source /etc/kolla/admin-openrc.sh cd /usr/share/kolla-ansible ./init-runonce 报错内容 Traceback (most re ...
- python IO编程-序列化
原文链接:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143192607 ...
- 洛谷 P1056 排座椅
P1056 排座椅 题目描述 上课的时候总会有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情.不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的D对同学上 ...
- HDOJ 2544 最短路(最短路径 dijkstra算法,SPFA邻接表实现,floyd算法)
最短路 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...