呵呵,小曹果然不负众望。
我知道的二分图最大匹配算法我也只知道匈牙利算法而已。
与你的不同之处在于你用的是DFS,而我用的是BFS。回头我要对比一下你我程序的差别。
展示一下我的WA代码吧。关于机枪能自毁这事当我看到它的攻击范围是从0开始时已经意识到了。
最近没有玩ACM的心情,休息一下。呵呵,就辛苦两位了。
程序代码:
我知道的二分图最大匹配算法我也只知道匈牙利算法而已。
与你的不同之处在于你用的是DFS,而我用的是BFS。回头我要对比一下你我程序的差别。
展示一下我的WA代码吧。关于机枪能自毁这事当我看到它的攻击范围是从0开始时已经意识到了。
最近没有玩ACM的心情,休息一下。呵呵,就辛苦两位了。
程序代码:#include<stdio.h>
#define M 100
int cal(int map[][M], int n)
{
int x[M] = {}, lx[M], mx[M];
int y[M] = {}, ly[M], my[M];
int c = 0, lxn, lyn, i, j, k, t;
for(c = i = 0; i < n; i++)
{
if(x[i]) continue;
for(j = 0; j < n; j++) mx[j] = my[j] = 0;
mx[i] = 1;
lx[0] = i;
lxn = 1;
lyn = 0;
for(k = j = 0; j < lxn; j++)
{
for(t = 0; t < n; t++)
{
if(!map[lx[j]][t] || my[t]) continue;
if(y[t]){ my[t] = 1; ly[lyn++] = t;}
else{ x[i] = 1; y[t] = 1; c++; break;}
}
if(t != n) break;
for(; k < lyn; k++)
for(t = 0; t < n; t++)
if(x[t] && map[t][ly[k]] && !mx[t])
{
lx[lxn++] = t;
mx[t] = 1;
}
}
}
return c;
}
int main()
{
int map[M][M], x[M], y[M], s[M], e[M];
int t, n, i, j, d;
for(scanf("%d", &t); t--; printf("%d\n", cal(map, n)))
{
for(scanf("%d", &n), i = 0; i < n; s[i] *= s[i], e[i] *= e[i], i++)
scanf("%d%d%d%d", &x[i], &y[i], &s[i], &e[i]);
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
map[i][j] = (d = (d = x[i] - x[j]) * d + (d = y[i] - y[j]) * d) >= s[i] && d <= e[i];
}
return 0;
}

重剑无锋,大巧不工








