hdu 4582 DFS spanning tree
来源:互联网 发布:新郎 婚礼开场白 知乎 编辑:程序博客网 时间:2024/06/10 06:51
一开始在有没有横向边的问题上纠结,后来又卡在数据结构的表示上。。。真心菜的不能看,只好从思路到数据结构都借鉴别人的吧
#include <cstdio>#include <iostream>#include <vector>#include <bitset>using namespace std;const int MAXN = 2005;vector<int> ee[MAXN], dd[MAXN];bitset< MAXN > aa[MAXN];int m, n, res;int vis[MAXN];void dfs(int u, int pre){vis[u] = 1;aa[u].reset();for (int i = 0; i< dd[u].size(); ++i){int v = dd[u][i];if (vis[v])aa[u][v] = 1;}for (int i = 0; i< ee[u].size(); ++i){int v = ee[u][i];if (v!=pre){dfs(v, u);}}if (pre == -1) return;else if (aa[u].test(pre)) ++res;else aa[pre] |= aa[u];}int main() {#ifndef ONLINE_JUDGE freopen("in.txt", "r", stdin);#endifwhile (scanf("%d%d", &n, &m) != EOF && n+m){for (int i = 1; i<=n; ++i) ee[i].clear(), dd[i].clear();memset(vis, 0, sizeof vis);res = 0;for (int i = 0; i< n-1; ++i){int u,v;scanf("%d%d", &u, &v);ee[u].push_back(v); ee[v].push_back(u);}for (int i = n-1; i< m; ++i){int u, v;scanf("%d%d", &u, &v);dd[u].push_back(v); dd[v].push_back(u);}dfs(1,-1);printf("%d\n", res);} return 0;}
0 0
- hdu 4582 DFS spanning tree
- hdu 4582 DFS spanning tree
- HDOJ 4582 DFS spanning tree
- HDOJ 4582: DFS spanning tree
- hdu4582 DFS spanning tree
- HDU 4582 DFS spanning tree 解题报告(贪心 & 树形DP)
- hdu4582 DFS spanning tree 贪心
- HDU-4408-Minimum Spanning Tree
- hdu 4408 Minimum Spanning Tree
- hdu 1223 minimum spanning tree
- hdu 4263 Red/Blue Spanning Tree
- [HDU 4263]Red/Blue Spanning Tree[kruskal]
- hdu 4263 Red/Blue Spanning Tree
- Spanning tree
- Spanning Tree
- spanning-tree
- codeforces 618D Hamiltonian Spanning Tree(dfs)
- CodeForces 618 D.Hamiltonian Spanning Tree(dfs)
- UML之交互图
- 网络工程师三级进阶(转)
- Java SE7新特性之switch语句中使用字符串
- Network-attached storage (NAS)
- Visual Studio 11可视化多核多线程编程的行为
- hdu 4582 DFS spanning tree
- UCI数据集和源代码
- 点类与线类(继承)
- VC++双缓冲之实现
- 使用cookie,session,filter等技术实现用户自动登录
- 黑马程序员— 交通灯管理系统_代码实现
- Ubuntu下 JDK和Eclipse安装
- Java SE7新特性之try-with-resources语句
- CoAP学习笔记——CoAP资源发现