高斯消元+搜索

很明显每个开关只能按一次,那么我们可以想到高斯消元,其实就是解异或方程组,但是最后会有一些自由元,也就是有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 ;
}

最新文章

  1. 【HTML】Html页面跳转的5种方式
  2. C阶段【02】 - 分支结构
  3. Java参数按值传递?按引用传递
  4. Zookeeper注册节点的掉线自动重新注册及测试方法
  5. ASP.NET - 用户控件制作
  6. G&#243;ra urządzenia z dwoma zwiększyć moc może sprawić
  7. css变量
  8. 随机切换IP和UA
  9. OpenGL平面阴影
  10. APP中一种在Java层实现的简单守护进程方式
  11. 设计模式系列之装饰模式(Decorator Pattern)
  12. Eclipse 运行导入的 Java 项目时,Error:A JNI error has occurred
  13. 使用CSS选择器实现选择指定子节点
  14. ipv4网络无访问权限
  15. Windows系统下安装dig命令
  16. 17秋 软件工程 第六次作业 Beta冲刺 Scrum5
  17. poj1436水平可见线
  18. redis内部数据结构和外部数据结构揭秘
  19. grep命令打印前N行
  20. android的hook方面知识点

热门文章

  1. windows 安装 python3
  2. SPI与I2C
  3. 创建私有 Gems 源
  4. BNUOJ 3226 Godfather
  5. ZOJ1004 &amp;&amp; HDU1515 dfs回溯
  6. 593. Valid Square
  7. java.lang.ClassNotFoundException: org.apache.jsp.WEB_002dINF.views.login_jsp
  8. android开发里跳过的坑——adb connect连不上
  9. CALayer之 customizing timing of an animation
  10. 动态链接 - dll和so文件区别与构成