标签:src 网络 数组 print col 格式 表示 路由器 pac
1 #include<stdio.h> 2 #include<string.h> 3 #include<queue> 4 #define mem(a, b) memset(a, b, sizeof(a)) 5 typedef long long ll; 6 using namespace std; 7 const int MAXN = 210; 8 const int inf = 0x3f3f3f3f; 9 10 int n, m, k; 11 ll r; //n + m个点 其中 m 个点是可选择添入的 最后可增设其中 k 个点。 12 ll x[MAXN], y[MAXN]; 13 int head[MAXN], cnt, vis[MAXN][110], dis[MAXN]; 14 15 struct Edge 16 { 17 int to, next, w; 18 }edge[MAXN * (MAXN - 1)]; 19 20 struct Node 21 { 22 int pot, num; 23 }node; 24 25 void add(int a, int b, int c) 26 { 27 cnt ++; 28 edge[cnt].to = b; 29 edge[cnt].w = c; 30 edge[cnt].next = head[a]; 31 head[a] = cnt; 32 } 33 34 void spfa() 35 { 36 queue<Node> Q; 37 node.pot = 1, node.num = 0; 38 dis[1] = 0; 39 vis[1][0] = 1; 40 Q.push(node); 41 while(!Q.empty()) 42 { 43 Node a = Q.front(); 44 Q.pop(); 45 vis[a.pot][a.num] = 0; 46 for(int i = head[a.pot]; i != -1; i = edge[i].next) 47 { 48 int to = edge[i].to; 49 int p = a.num; 50 if(to > n) 51 p ++; 52 if(dis[to] > dis[a.pot] + edge[i].w && p <= k) 53 { 54 dis[to] = dis[a.pot] + edge[i].w; 55 if(!vis[to][p]) 56 { 57 vis[to][p] = 1; 58 node.pot = to, node.num = p; 59 Q.push(node); 60 } 61 } 62 } 63 } 64 } 65 66 int main() 67 { 68 mem(head, -1), cnt = 0; 69 mem(vis, 0), mem(dis, inf); 70 scanf("%d%d%d%lld", &n, &m, &k, &r); 71 for(int i = 1; i <= n + m; i ++) 72 scanf("%lld%lld", &x[i], &y[i]); 73 for(int i = 1; i < n + m; i ++) 74 { 75 for(int j = i + 1; j <= n + m; j ++) 76 { 77 if((x[i] - x[j]) * (x[i] - x[j]) + (y[i] - y[j]) * (y[i] - y[j]) <= r * r) 78 { 79 add(i, j, 1); 80 add(j, i, 1); 81 } 82 } 83 } 84 spfa(); 85 printf("%d\n", dis[2] - 1); 86 return 0; 87 } 88 89 /* 90 测试数据: 91 5 3 1 3 92 0 0 93 5 5 94 0 3 95 0 5 96 3 5 97 3 3 98 4 4 99 3 0 100 2 101 102 10 1 1 2 103 0 0 104 3 1 105 -2 0 106 -2 2 107 -2 4 108 -2 6 109 0 6 110 2 6 111 2 4 112 2 2 113 2 0 114 1 115 116 10 1 1 2 117 0 0 118 3 1 119 -2 0 120 -2 2 121 -2 4 122 -2 6 123 0 6 124 2 6 125 2 4 126 2 2 127 3 0 128 8 129 130 6 3 2 50000000 131 0 0 132 50000000 100000000 133 100000000 100000000 134 100000000 0 135 100000000 50000000 136 50000000 0 137 -100000000 50000000 138 0 50000000 139 0 100000000 140 2 141 */
标签:src 网络 数组 print col 格式 表示 路由器 pac
原文地址:https://www.cnblogs.com/yuanweidao/p/11863201.html