vijos 1212 way selection 二分图匹配

来源:互联网 发布:东莞凤岗cnc编程培训 编辑:程序博客网 时间:2024/05/08 17:42

梗:弄错 ij 居然想打邻接表 dfs里!ans[i]打成!vst[i] 肉眼查了好久……
直接暴力算能不能连边即可

#include<iostream>#include<cmath>#include<cstring>#include<cstdio>using namespace  std;double p[1007][2],xs[1007][2],v[1007];double r, a, t, ans[1007], vst[1007], g[1007][1007];bool dfs(int u) {    for(int i=1;i<=a;i++)        if (g[u][i] && !vst[i]) {            vst[i] = 1;            if (!ans[i] || dfs(ans[i])) { ans[i] = u; return 1; }        }    return 0;}void maxmatch() {    int cnt = 0;    for (int i = 1; i <= r; i++) {        memset(vst, 0, sizeof(vst));        if (dfs(i)) cnt++;    }    cout << cnt;}int main() {    cin >> r >> a >> t;    for (int i = 1; i <= a; i++) cin >> p[i][0] >> p[i][1];    for (int i = 1; i <= r; i++) {        cin >> xs[i][0] >> xs[i][1] >> v[i];    }    for(int i=1;i<=r;i++){        for (int j = 1; j <= a; j++)            if (v[i] * t >= sqrt((xs[i][0] - p[j][0])*(xs[i][0] - p[j][0]) + (xs[i][1] - p[j][1])*(xs[i][1] - p[j][1]))) g[i][j] = 1;    }    int cnt = 0;    for (int i = 1; i <= r; i++) {        memset(vst, 0, sizeof(vst));        if (dfs(i)) cnt++;    }    cout << cnt;    //system("pause");    return 0;}
原创粉丝点击