社区讨论
24 Pts 求调
P14307【MX-J27-T4】点灯参与者 2已保存回复 3
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 3 条
- 当前快照
- 1 份
- 快照标识符
- @mhizwkmq
- 此快照首次捕获于
- 2025/11/03 18:26 4 个月前
- 此快照最后确认于
- 2025/11/03 18:26 4 个月前
CPP
#include <bits/stdc++.h>
#define int long long
#define N 25005
#define INF 1e18
using namespace std;
int c,t;
int n,m,o;
struct Edge{
int v,w;
};
vector<Edge> g[N];
int vis[N][2];
struct Node{
int u,ans;
};
void bfs(){
queue<Node> q;
q.push({1,0});
vis[1][1] = 0;
while (q.size()){
int u = q.front().u;
int ans = q.front().ans;
q.pop();
if (vis[u][ans%2] <= ans) continue;
vis[u][ans%2] = ans;
for (auto [v,w] : g[u]){
if (ans + 1 < w) ans += ceil(1.0*(w-ans-1)/2.0)*2;
q.push({v,ans+1});
}
}
}
signed main(){
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
cin >> c >> t;
while (t--){
cin >> n >> m >> o;
for (int i=1;i<=n;++i){
vis[i][0] = INF;
vis[i][1] = INF-1;
}
for (int i=1;i<=n;++i) g[i].clear();
for (int i=1;i<=m;++i){
int u,v,w; cin >> u >> v >> w;
g[u].push_back({v,w});
g[v].push_back({u,w});
}
bool is = true;
for (auto [v,w] : g[1]){
if (w <= 1) is = false;
}
if (is){
cout << "-1\n";
continue;
}
bfs();
int ans1 = -1,ans2 = -1;
bool is_ou=false,is_ji=false;
for (int i=1;i<=n;++i){
if (vis[i][0] == INF) is_ou = true;
if (vis[i][1] == INF) is_ji = true;
}
if (is_ou && is_ji){
cout << -1 << '\n';
continue;
}
for (int i=1;i<=n;++i) ans1 = max(ans1,vis[i][0]);
for (int i=1;i<=n;++i) ans2 = max(ans2,vis[i][1]);
//cout << vis[7] << ' ';
int ans = INF;
if (!is_ou) ans = min(ans,ans1);
if (!is_ji) ans = min(ans,ans2);
cout << ans * o << '\n';
}
return 0;
}
回复
共 3 条回复,欢迎继续交流。
正在加载回复...