bzoj 1369: [Baltic2003]Gem
2024-09-07 02:33:09
确实是神2333333333,一开始以为是01染色sb题,然而被打脸。。。
(蒟蒻不乱说,网上各种神犇的题解,还有图!!)
#include <bits/stdc++.h>
#define LL long long
#define lowbit(x) x&(-x)
#define inf 0x3f3f3f3f
using namespace std;
inline int ra()
{
int x=,f=; char ch=getchar();
while (ch<'' || ch>'') {if (ch=='-') f=-; ch=getchar();}
while (ch>='' && ch<='') {x=x*+ch-''; ch=getchar();}
return x*f;
}
int n,cnt;
int head[],f[][];
struct edge{
int to,next;
}e[];
void insert(int x, int y)
{
e[++cnt].next=head[x]; e[cnt].to=y; head[x]=cnt;
}
void dfs(int x, int fa)
{
for (int i=; i<=; i++)
f[x][i]=i;
for (int i=head[x];i;i=e[i].next)
if (e[i].to!=fa) dfs(e[i].to,x);
for (int j=; j<=; j++)
{
for (int i=head[x];i;i=e[i].next)
if (e[i].to!=fa)
{
int mn=inf;
for (int k=; k<=; k++)
if (j!=k) mn=min(mn,f[e[i].to][k]);
f[x][j]+=mn;
}
}
}
int main(int argc, char const *argv[])
{
n=ra();
for (int i=; i<n; i++)
{
int x=ra(),y=ra();
insert(x,y); insert(y,x);
}
dfs(,);
int ans=inf;
for (int j=; j<=; j++)
ans=min(ans,f[][j]);
cout<<ans;
return ;
}
最新文章
- android开发------编写用户界面之线性布局
- mac下使用brew安装ffmpeg支持x265
- mysql的一个特殊问题 you can&#39;t specify target table &#39;cpn_regist&#39; for update in FROM clause
- VS类自定义版权注释
- 如何切换android的横屏与竖屏?
- cocos2d-x路~使得第一个字游戏(一个)
- js中角度计算
- source command not found in sh shell解决办法
- Android中实现定时器的四种方式
- python3之shutil高级文件操作
- libev-4.20编译安装及简单使用
- Several ports (8005, 8080, 8009)被占用
- CountDownLatch 源码解析—— countDown()
- Lua语法基础(一)
- JavaScript之Promise学习笔记
- Swagger2常用注解及其说明 (转)
- mybatis查询语句的背后之封装数据
- 23.Hibernate-基础.md
- openfalcon架构及相关服务配置详解
- js中使用0 “” null undefined {}需要注意