我看了一下是提高-的题,就直接打了个暴力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;
}