数据太水了
查看原帖
数据太水了
140475
CL_annadion楼主2020/12/10 11:53

我看了一下是提高-的题,就直接打了个暴力dfs,然后就过了

看了一下题解才发现是未损坏的赋0,跑最短路

int n, m, d;
struct node{
    int to, cost;
};
vector<node> g[maxn];
int broken[maxn][maxn];
int st, ed;
int ans = INF;
int vis[maxn];
void dfs(int cur, int sum){
    if(sum >= ans) return;
    if(cur == ed) {
        ans = min(ans, sum);
        return;
    }
    int len = g[cur].size();
    for(int i = 0; i < len; ++i){
        int v = g[cur][i].to;
        if(vis[v]) continue;
        vis[v] = 1;
        if(broken[cur][v]){
            dfs(v, sum + g[cur][i].cost);
        }
        else dfs(v, sum);
        vis[v] = 0;
    }
}
int main()
{
    cin >> n >> m;
    memset(broken, 0, sizeof(broken));
    memset(vis, 0, sizeof(vis));
    for(int i = 1; i <= m; ++i){
        int x, y, z;
        cin >> x >> y >> z;
        g[x].push_back(node{y, z});
        g[y].push_back(node{x, z});
    }
    cin >> d;
    for(int i = 1; i <= d; ++i){
        int x, y;
        cin >> x >> y;
        broken[x][y] = 1;
        broken[y][x] = 1;
    }
    cin >> st >> ed;
    dfs(st, 0);
    cout << ans;
    return 0;
}
2020/12/10 11:53
加载中...