P5767 求助
  • 板块学术版
  • 楼主csq_OoO
  • 当前回复2
  • 已保存回复2
  • 发布时间2025/7/2 17:53
  • 上次更新2025/7/3 12:45:26
查看原帖
P5767 求助
1368191
csq_OoO楼主2025/7/2 17:53
#include<bits/stdc++.h>
using namespace std;

int n, m, s, minn, k;
int Map[510][510], a[510], dis[510];
char c;
bool f[510];

int main() {
	memset(Map, 0x3f, sizeof(Map));
	scanf("%d%d\n", &m, &n);
	if( n == 1 ) {
		cout << 0;
		return 0;
	}
	while ( m-- ) {
		c = ' ';
		int i = 1;
		for ( ; c != '\n' && c != '\r'; i++ ) scanf("%d%c", &a[i], &c);
		for ( int j = 1; j < i; j++ ) {
			for ( int l = j + 1; l < i; l++ ) Map[a[j]][a[l]] = 1;
		}
	}
	for ( int i = 1; i <= n; i++ ) dis[i] = Map[1][i];
	dis[1] = 0;
	f[1] = 1;
	for ( int i = 1; i < n; i++ ) {
		minn = INT_MAX;
		for ( int j = 1; j <= n; j++ ) {
			if ( f[j] == 0 && dis[j] < minn ) {
				k = j;
				minn = dis[j];
			}
		}
		f[k] = 1;
		if ( k == n ) break;
		for ( int j = 1; j <= n; j++ ) {
			if ( f[j] == 0 && dis[k] + Map[k][j] < dis[j] ) dis[j] = dis[k] + Map[k][j];
		}
	}
	if ( dis[n] < 0x3f ) cout << dis[n] - 1;
	else cout << "NO";
	return 0;
}
2025/7/2 17:53
加载中...