新建不超過\(k\)個無線路由器,求使路由器1、2連通最少的中間路由器。
首先常規建圖,將相距不超過\(r\)的路由器(包括新建的)相連。
想到了分層\(dijkstra\)。類似的,作\(bfs\)時記錄已經經過的新建路由器個數\(b\)。\(queue\)內節點的形式就是當前路由器編號、經過的新建路由器個數、經過的路由器個數:\(\)。\(vis[a][b]\)陣列可以不包括第三維\([dis]\),因為\(queue\)中的\(dis\)是遞增的,再次到達\([a][b]\)的狀態時,不會產生更好的結果。也可以加上,\(dis\)最多為100,200*100*100不會超時。
#includeconst int maxn = 100;
const int maxm = 100;
using namespace std;
int n, m, k;
double r;
struct tnode
;tnode node[maxn + maxm + 10];
int to[(maxn + maxm) * (maxn + maxm) * 2 + 10];
int nex[(maxn + maxm) * (maxn + maxm) * 2 + 10];
int head[maxn + maxm + 10], cnt = 0;
void addedge(int x, int y)
int vis[maxn + maxm + 10][maxm + 10];
struct tnnode
};int main()
memset(head, -1, sizeof(head));
for (int i = 1; i <= n + m; i++)
}memset(vis, 0, sizeof(vis));
queueq;
q.push(tnnode(1, 0, 0));
vis[1][0] = 1;
while (true)
for (int i = head[a]; i != -1; i = nex[i])
}else}}
}return 0;
}
CCF CSP 201403 4 無線網路
問題描述 目前在乙個很大的平面房間裡有 n 個無線路由器,每個無線路由器都固定在某個點上。任何兩個無線路由器只要距離不超過 r 就能互相建立網路連線。除此以外,另有 m 個可以擺放無線路由器的位置。你可以在這些位置中選擇至多 k 個增設新的路由器。你的目標是使得第 1 個路由器和第 2 個路由器之間...
CCF CSP題解 201512 4 送貨
求字典序最小尤拉路。似乎不能用 fluery 演算法 o e 2 fluery 演算法的思路是 延申的邊盡可能不是除去已走過邊的圖的橋 割 每走一步都要判斷是否是割,應當會超時。採用 hierholzer 演算法 o v e 亦稱逐步插入迴路法。思路見 注意根據題意,每次選取未走過頂點最小的邊延申。...
ccf csp 歷年真題題解
更新中 ccf csp 2013冬季真題題解 ccf csp 2014春季真題題解 ccf csp 2014秋季真題題解 ccf csp 2014冬季真題題解 ccf csp 2015春季真題題解 ccf csp 2015秋季真題題解 ccf csp 2015冬季真題題解 ccf csp 2016春...