UVALive 6255:Kingdoms(状压DFS)
题意
给出n个王国和n*n的矩阵,mp[i][j] 代表第 i 个王国欠第 j 个王国 mp[i][j] 块钱。如果当前的王国处于负债状态,那么这个王国就会被消除,和它相连的王国的债务都会被清除。因此会产生连锁反应,使得最后可能只剩下一个王国。输出对于每种情况,最后可能只剩下的王国有哪些。
思路
一开始的想法就是DFS+状压,但是TLE了,队友和我说没记录状态,那样的复杂度差不多是O(n!)的。后面队友写了一个,疯狂WA。
想了好久都没发现的错误:当时做法是全局记录一个原始的图和一个当前的图,每次修改当前的图(修改双向边),然后DFS完又复原回去,这样会错误。
但是这里修改只要修改单向边就可以了,因为如果把行也修改了,复原的时候把行也复原的话,可能本来在这个状态是被删除的,但是又被复原回去了。
有一个比较暴力的做法就是局部开一个图,然后放进去,最后再放回来。这样肯定不会出错,就是比较耗时。
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<int, int> pii;
const int INF = 0x3f3f3f3f;
const int N = 20 + 11;
int dp[1<<21], mp[N][N], init[N][N], sum[N], n;
vector<int> ans;
int dfs(int st, int rem) {
if(~dp[st]) return dp[st];
if(rem == 1) return dp[st] = 1;
dp[st] = 0;
for(int i = 0; i < n; i++) {
if((st >> i) & 1) {
int tmp = 0;
for(int j = 0; j < n; j++)
tmp -= mp[i][j];
if(tmp >= 0) continue;
for(int j = 0; j < n; j++)
mp[j][i] = 0;
dfs(st ^ (1 << i), rem - 1);
for(int j = 0; j < n; j++)
mp[j][i] = init[j][i];
}
}
}
int main() {
int t; scanf("%d", &t);
while(t--) {
scanf("%d", &n);
memset(sum, 0, sizeof(sum));
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
scanf("%d", &mp[i][j]), init[i][j] = mp[i][j];
memset(dp, -1, sizeof(dp));
dfs((1 << n) - 1, n);
ans.clear();
for(int i = 0; i < n; i++)
if(dp[1<<i] == 1) ans.push_back(i + 1);
int sz = ans.size();
if(!sz) puts("0");
else for(int i = 0; i < sz; i++)
printf("%d%c", ans[i], i + 1 == sz ? '\n' : ' ');
} return 0;
}
/*
1
3
0 -3 1
3 0 -2
-1 2 0
*/
UVALive 6255:Kingdoms(状压DFS)的更多相关文章
- ZOJ 1609 Equivalence(状压+dfs减枝)
ZOJ Problem Set - 1609 Equivalence Time Limit: 5 Seconds Memory Limit: 32768 KB When learning m ...
- bzoj1725: [Usaco2006 Nov]Corn Fields牧场的安排(状压dfs)
1725: [Usaco2006 Nov]Corn Fields牧场的安排 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1122 Solved: 80 ...
- 状压dfs小记
一点前(tu)言(cao) 真的考起dfs来可谓是什么都能往dfs上套 状压不止能dp,还能与dfs结合成为搜索好(duliu)题 剪枝卡常司空见惯(打开题解一看并不是纯dfs,emmmm) 开始正文 ...
- codeforces 285 D. Permutation Sum 状压 dfs打表
题意: 如果有2个排列a,b,定义序列c为: c[i] = (a[i] + b[i] - 2) % n + 1 但是,明显c不一定是一个排列 现在,给出排列的长度n (1 <= n <= ...
- BZOJ 4057: [Cerc2012]Kingdoms( 状压dp )
状压dp.... 我已开始用递归结果就 TLE 了... 不科学啊...我dp基本上都是用递归的..我只好改成递推 , 刷表法 将全部公司用二进制表示 , 压成一个数 . 0 表示破产 , 1 表示没 ...
- JZYZOJ1530 [haoi2013]开关控制 状压 dfs 折半搜索
http://172.20.6.3/Problem_Show.asp?id=1530 元宵节快要到了,某城市人民公园将举办一次灯展.Dr.Kong准备设计出一个奇妙的展品,他计划将编号为1到N的N(1 ...
- 2018icpc南京网络赛-E AC Challenge(状压+dfs)
题意: n道题,每道题有ai和bi,完成这道题需要先完成若干道题,完成这道题可以得到分数t*ai+bi,其中t是时间 1s, n<=20 思路: 由n的范围状压,状态最多1e6 然后dfs,注意 ...
- UVALive 6255 Kingdoms --状态搜索
题意:n个国家,给出国家间相互的债务关系,每个国家如果债务>收入就要破产,破产后该国的所有债务关系全部清除,第一个破产的国家不同有可能造成最后的没破产的国家的不同,问哪些国家有可能成为独自存活的 ...
- hdu 4620 Fruit Ninja Extreme(状压+dfs剪枝)
对t进行从小到大排序(要记录ID),然后直接dfs. 剪枝的话,利用A*的思想,假设之后的全部连击也不能得到更优解. 因为要回溯,而且由于每次cut 的数目不会超过10,所以需要回溯的下标可以利用一个 ...
随机推荐
- CountDownLatch和CyclicBarrier 专题
4.Runnable接口和Callable接口的区别 有点深的问题了,也看出一个Java程序员学习知识的广度. Runnable接口中的run()方法的返回值是void,它做的事情只是纯粹地去执行ru ...
- springboot 集成oauth2
未实现.首先实现spring security. 1. 关于oauth2 隐隐觉得集成oauth2,用好它是一个不太简单的事儿,需要对oauth2了解一番. oauth2比较好的参考,都是别人原创文章 ...
- MVC 身份验证和异常处理过滤器
:在Global中注册为全局过滤器,应用于所有的Controller的Action 参数类均继承自ControllerContext,主要包含属性请求上下文.路由数据.结果 using FilterE ...
- ASP Get请求
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...
- seajs教程(一):基本用法
介绍 SeaJS 是一个适用于 Web 浏览器端的模块加载器.使用 SeaJS,可以更好地组织 JavaScript 代码. Sea.js 遵循 CMD 规范,模块化JS代码.依赖的自动加载.配置的简 ...
- tensorflow 1.0 学习:模型的保存与恢复
将训练好的模型参数保存起来,以便以后进行验证或测试,这是我们经常要做的事情.tf里面提供模型保存的是tf.train.Saver()模块. 模型保存,先要创建一个Saver对象:如 saver=tf. ...
- ArcGIS for Desktop入门教程_第六章_用ArcMap制作地图 - ArcGIS知乎-新一代ArcGIS问答社区
原文:ArcGIS for Desktop入门教程_第六章_用ArcMap制作地图 - ArcGIS知乎-新一代ArcGIS问答社区 1 用ArcMap制作地图 作为ArcGIS for Deskto ...
- 微信小程序把玩(十六)form组件
原文:微信小程序把玩(十六)form组件 form表单组件 是提交form内的所有选中属性的值,注意每个form表单内的组件都必须有name属性指定否则提交不上去,button中的type两个subm ...
- vs编译在win xp电脑上运行的win32程序遇到的问题记录(无法定位程序输入点GetTickCount64于动态链接库KERNEL32.dll)
直接编译后运行,弹出提示框:不是有效的win32应用程序 像之前那样把msvcr110.dll复制过去依然报错: 这是因为vs2012编译的win32程序用到的系统函数在xp环境上对应不上.之前转载的 ...
- asp.net ToString() 格式化字符串
c# ToString() 格式化字符串 格式化数值:有时,我们可能需要将数值以一定的格式来呈现,就需要对数值进行格式化.我们使用格式字符串指定格式.格式字符串采用以下形式:Axx,其中 A 为格式 ...