基础搜索
图一乐图一乐
这个作者很懒,什么都没留下…
展开
-
D - Police Stations(bfs)
题意:n个城市,k个警察局,求最多删除几条边,使得每个城市都可以在d长度内到达一个警察局。 思路:贪心,使得每个城市的居民去离他最近的警察局,那么就可以有一些不必要的边可以被删除。然后用map存储下每条边的标号。从所有警察局开始深度搜索,遇到没有被接受的,并且本身没有警察局的城市就接受他,说明当前这条道路是该城市到警察局的最短路。 unordered_set<int> st; queue<int> q; vector<int> G[N]; map<pii, int&原创 2020-07-11 15:41:53 · 146 阅读 · 0 评论 -
回顾19年省赛welcome party
vector<int> G[N]; int vis[N],ans[N]; int f[N];//求连通块个数,取连通块中的最小值,然后优先队列bfs int dad(int x) { return f[x] == x ? x : f[x]=dad(f[x]); } void merge(int x,int y) { int fx = dad(x), fy = dad(y); if (fx > fy)f[fx] = fy;//根为联通块最小值 else f[fy] = fx; } vo原创 2020-05-12 11:08:40 · 94 阅读 · 0 评论 -
Find The Multiple POJ - 1426
int n; bool fg; void dfs(ull now, int k) { if (fg)return; if (k == 20)return; if (now%n == 0) { fg = 1;cout << now << endl;return; } dfs(now * 10, k + 1); dfs(now * 10 + 1, k + 1); r...原创 2020-04-30 13:14:46 · 89 阅读 · 0 评论 -
Catch That Cow POJ - 3278(拓展出边)
int n, k,ans; bool vis[N]; struct node { int w, len; }; void bfs() { queue<node> q; q.push(node{n,0});vis[n] = true; while (!q.empty()) { node now = q.front();q.pop(); if (now.w == k) {...原创 2020-04-29 13:17:38 · 103 阅读 · 0 评论 -
Dungeon Master POJ - 2251(三维bfs)
int dx[] = {1,0,0,-1,0,0}; int dy[] = {0,1,0,0,-1,0}; int dz[] = {0,0,1,0,0,-1}; char mp[35][35][35]; bool vis[35][35][35]; int sx, sy, sz, ex, ey, ez,ans; int l, r, c; struct node { int x, y, z, len...原创 2020-04-29 11:19:31 · 134 阅读 · 0 评论