社区讨论

WA on #4 求条

P1841[JSOI2007] 重要的城市参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mde9orqf
此快照首次捕获于
2025/07/22 16:22
8 个月前
此快照最后确认于
2025/07/22 19:25
8 个月前
查看原帖
CPP
// Problem: Luogu P1841
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P1841
// Memory Limit: 125 MB
// Time Limit: 1000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#include <bits/stdc++.h>
#define N 205
#define int long long
#define INF 1e18
using namespace std;

int n,m;
int dp[N][N];
vector<int> done[N][N];
set<int> ans;

void init(){
	for (int i=1;i<=n;++i){
		for (int j=1;j<=n;++j){
			dp[i][j] = INF;
		}
	}
	
	// 初始化对角线
	for (int i=1;i<=n;++i) dp[i][i] = 0;
}

signed main(){
	ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
	cin >> n >> m;
	
	init();
	
	for (int i=1;i<=m;++i){
		int a,b,w;cin >> a >> b >> w;
		dp[a][b] = w;
		dp[b][a] = w;
	}
	
	for (int k=1;k<=n;++k){
		for (int i=1;i<=n;++i){
			for (int j=1;j<=n;++j){
				if (i == k || j == k) continue;// 不重点
				int cnt = dp[i][k] + dp[k][j];
				if (cnt < dp[i][j]){
					dp[i][j] = cnt;
					done[i][j].clear();
					done[i][j].push_back(k);
				}
				else if (cnt == dp[i][j]) done[i][j].push_back(k);
			}
		}
	}
	
	for (int i=1;i<=n;++i){
		for (int j=1;j<=n;++j){
			if (done[i][j].size() == 1){
				ans.insert(done[i][j][0]);
			}
		}
	}
	
	if (ans.size()) for (int d : ans) cout << d << ' ';
	else cout << "No important cities.";
	
	
	return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...