2 条题解
-
0陈烨鑫 (chenyexin) LV 10 @ 2023-4-25 20:08:38
错的也敢发上来? 代码:
//好像没什么可注释的... #include<cstdio> const int maxn=10005; const int maxm=maxn<<1; const int inf=0x3f3f3f3f; int f[maxn][2]; int n,m,tot,x,y,root; int c[maxn],h[maxn],to[maxm],nxt[maxm]; int min(int x,int y){ return x<y?x:y; } void read(int&x){ x=0; bool f=0; char ch=getchar(); while(ch<'0'||ch>'9'){ if(ch=='-')f=1; ch=getchar(); } while(ch<='9'&&ch>='0'){ x=(x<<1)+(x<<3)+(ch&15); ch=getchar(); } if(f)x=-x; return; } void add(int x,int y){ to[++tot]=y; nxt[tot]=h[x]; h[x]=tot; to[++tot]=x; nxt[tot]=h[y]; h[y]=tot; return; } void dfs(int x,int fa){ for(int i=h[x];i;i=nxt[i]){ int e=to[i]; if(e==fa)continue; dfs(e,x); f[x][0]+=min(f[e][0]-1,f[e][1]); f[x][1]+=min(f[e][0],f[e][1]-1); } return; } int main(){ read(n);read(m); for(int i=1;i<=m;++i){ read(c[i]); f[i][c[i]]=1; f[i][!c[i]]=inf; } for(int i=1;i<n;++i){ read(x);read(y); add(x,y); } for(int i=m+1;i<=n;++i) f[i][0]=f[i][1]=1; dfs(n,-1); //本来之前我也不知道可以随便选根,据说 n 当根可以过,我就用 n 做根了www printf("%d",min(f[n][0],f[n][1])); return 0; }
-
02023-3-19 20:55:27@
#define MAXM 10010 #define INF 20000 using namespace std; struct node { int to, next; } e[MAXM << 1]; int head[MAXM], tot; int f[MAXM][3], m, n, c[MAXM]; void add(int u, int v) { tot++, e[tot].to = v, e[tot].next = head[u], head[u] = tot; } void init() { int i, u, v; scanf("%d%d", &m, &n); for (i = 1; i <= n; i++) scanf("%d", &c[i]); for (i = 1; i < m; i++) { scanf("%d%d", &u, &v); add(u, v), add(v, u); } for (i = 1; i <= m; i++) f[i][0] = f[i][1] = 1; } void dfs(int u, int fa) { int i, v; for (i = head[u]; i; i = e[i].next) { v = e[i].to; if (v == fa) continue; dfs(v, u); if (v <= n) f[v][!c[v]] = INF, f[v][2] = 1; f[u][0] += min(f[v][2], min(f[v][0] - 1, f[v][1])); f[u][1] += min(f[v][2], min(f[v][0], f[v][1] - 1)); f[u][2] += min(f[v][2], min(f[v][0], f[v][1])); } } int main() { init(); dfs(n + 1, -1); printf("%d\n", min(f[n + 1][2], min(f[n + 1][0], f[n + 1][1]))); return 0; }
- 1
信息
- ID
- 477
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 5
- 标签
- 递交数
- 31
- 已通过
- 15
- 上传者