bzoj2466
2024-08-28 14:50:56
高斯消元+搜索
很明显每个开关只能按一次,那么我们可以想到高斯消元,其实就是解异或方程组,但是最后会有一些自由元,也就是有x+y=z,x+y=z这种一样的方程就会产生自由元,那么我们爆搜自由元取值,每次把自由元回带入方程,因为形如x+y=z这样的方程就需要回带,然后就解出一组解,取最小值即可。这当然不是正解,100怎么能爆搜,正解是树形dp。
#include<bits/stdc++.h>
using namespace std;
const int Maxlen = , N = ;
int n, ans;
int a[N][N], mark[N], val[N];
namespace IO
{
char buf[Maxlen], *C = buf;
int Len;
inline void read_in()
{
Len = fread(C, , Maxlen, stdin);
buf[Len] = '\0';
}
inline void fread(int &x)
{
x = ;
int f = ;
while (*C < '' || '' < *C) { if(*C == '-') f = -; ++C; }
while ('' <= *C && *C <= '') x = (x << ) + (x << ) + *C - '', ++C;
x *= f;
}
inline void read(int &x)
{
x = ;
int f = ; char c = getchar();
while(c < '' || c > '') { if(c == '-') f = -; c = getchar(); }
while(c >= '' && c <= '') { x = (x << ) + (x << ) + c - ''; c = getchar(); }
x *= f;
}
} using namespace IO;
void dfs(int d, int tot)
{
if(tot >= ans) return;
if(d == )
{
ans = min(ans, tot);
return;
}
if(mark[d])
{
int x = a[d][n + ];
for(int i = ; i <= n; ++i) if(!mark[i] && a[d][i]) x ^= val[i];
dfs(d - , tot + x);
}
else
{
val[d] = ;
dfs(d - , tot);
val[d] = ;
dfs(d - , tot + );
}
}
void gauss()
{
ans = n;
for(int now = ; now <= n; ++now)
{
int pos = now;
while(!a[pos][now] && pos <= n) ++pos;
if(pos == n + ) continue;
swap(a[pos], a[now]);
for(int i = ; i <= n; ++i) if(a[i][now] && i != now)
for(int j = ; j <= n + ; ++j) a[i][j] ^= a[now][j];
mark[now] = ;
}
dfs(n, );
printf("%d\n", ans);
}
int main()
{
while()
{
read(n);
if(n == ) break;
memset(val, , sizeof(val));
memset(a, , sizeof(a));
memset(mark, , sizeof(mark));
for(int i = ; i <= n; ++i)
{
a[i][i] = ;
a[i][n + ] = ;
}
for(int i = ; i < n; ++i)
{
int u, v;
read(u);
read(v);
a[u][v] = a[v][u] = ;
}
gauss();
}
return ;
}
最新文章
- 【HTML】Html页面跳转的5种方式
- C阶段【02】 - 分支结构
- Java参数按值传递?按引用传递
- Zookeeper注册节点的掉线自动重新注册及测试方法
- ASP.NET - 用户控件制作
- G&#243;ra urządzenia z dwoma zwiększyć moc może sprawić
- css变量
- 随机切换IP和UA
- OpenGL平面阴影
- APP中一种在Java层实现的简单守护进程方式
- 设计模式系列之装饰模式(Decorator Pattern)
- Eclipse 运行导入的 Java 项目时,Error:A JNI error has occurred
- 使用CSS选择器实现选择指定子节点
- ipv4网络无访问权限
- Windows系统下安装dig命令
- 17秋 软件工程 第六次作业 Beta冲刺 Scrum5
- poj1436水平可见线
- redis内部数据结构和外部数据结构揭秘
- grep命令打印前N行
- android的hook方面知识点
热门文章
- windows 安装 python3
- SPI与I2C
- 创建私有 Gems 源
- BNUOJ 3226 Godfather
- ZOJ1004 &;&; HDU1515 dfs回溯
- 593. Valid Square
- java.lang.ClassNotFoundException: org.apache.jsp.WEB_002dINF.views.login_jsp
- android开发里跳过的坑——adb connect连不上
- CALayer之 customizing timing of an animation
- 动态链接 - dll和so文件区别与构成