社区讨论

我是妹子(只要你信),不是刚学oi的蒟蒻求助

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

讨论操作

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

当前回复
19 条
当前快照
1 份
快照标识符
@mi6zejwp
此快照首次捕获于
2025/11/20 13:19
4 个月前
此快照最后确认于
2025/11/20 15:45
4 个月前
查看原帖
为啥WA了两个点QAQ
CPP
// luogu-judger-enable-o2
// luogu-judger-enable-o2
#include<bits/stdc++.h>
using namespace std;

#define MAXN 205
#define LL long long
#define mo 19260817
#define stO 1438273
#define orz 19491001

LL a[MAXN][MAXN],c[MAXN][MAXN];
LL f[MAXN][MAXN];
LL g[MAXN][MAXN];
LL h[MAXN][MAXN];

LL n,m;
bool p[MAXN];

void rd() 
{
	memset(a,0x3f,sizeof(a));
	scanf("%lld%lld",&n,&m);
	for(int i = 1; i <= n; i ++)
	{	
		a[i][i] = 0;
		f[i][i] = 1;
	}
	for(int i = 1; i <= m; i ++) {
		LL x,y,l;
		scanf("%lld%lld%lld",&x,&y,&l);
		if(a[x][y] == l)
		{
			f[x][y] ++;
			g[x][y] ++;
		}
		if(a[x][y] > l)
		{
			f[x][y] = 1;
			g[x][y] = 1;
		}
		if(a[y][x] == l)
		{
			f[y][x] ++;
			g[y][x] ++;
		}
		if(a[y][x] > l)
		{
			f[y][x] = 1;
			g[y][x] = 1;
		}
		a[x][y] = min(a[x][y],l);
		a[y][x] = min(a[y][x],l);
	}
}


int main() {
	rd();
	
	/*)	for(int i = 1; i <= n; i ++)
		{ 
			for(int j = 1; j <= n; j ++)
				cout<<f[i][j]<<" ";
			cout<<"\n";
		}
		cout<<"\n";
		
		for(int i = 1; i <= n; i ++)
		{ 
			for(int j = 1; j <= n; j ++)
				printf("%11d",a[i][j]); 
			cout<<"\n";
		}
		cout<<"\n";
		cout<<"\n";*/
		
	for(int k = 1; k <= n; k ++)
	{
		for(int i = 1; i <= n; i ++)
			for(int j = 1; j <= n; j ++)
			if(i != j && i != k && j != k)
			{
				if(a[i][k] + a[k][j] == a[i][j])
					f[i][j]  = (f[i][j] + f[i][k] * f[k][j])%mo;
				if(a[i][k] + a[k][j] == a[i][j])
					g[i][j]  = (g[i][j] + g[i][k] * g[k][j])%orz;
				
				if(a[i][k] + a[k][j] < a[i][j])
				{
					f[i][j] = 1;
					g[i][j] = 1;
				}
				a[i][j] = min(a[i][j],a[i][k]+a[k][j]);
			}	
		/*for(int i = 1; i <= n; i ++)
		{ 
			for(int j = 1; j <= n; j ++)
				cout<<f[i][j]<<" ";
			cout<<"\n";
		}
		cout<<"\n";
		
		for(int i = 1; i <= n; i ++)
		{ 
			for(int j = 1; j <= n; j ++)
				printf("%11d",a[i][j]); 
			cout<<"\n";
		}
		cout<<"\n";
		cout<<"\n";*/
		
		
	}
	for(int i = 1; i <= n; i ++)
		for(int j = 1; j <= n; j ++)
			for(int k = 1; k <= n; k ++)
			if(i != j && i != k && j != k)	
				if(f[i][k] * f[k][j]%mo == f[i][j] &&g[i][k] * g[k][j]%orz == g[i][j] && a[i][k] + a[k][j] == a[i][j])
				{
				//	cout<<i<<" "<<j<<" "<<k<<"?\n";
					p[k] = 1;
				}
			
	
	bool fl = 1;
	for(int i = 1; i <= n; i ++)
	if(p[i])
	{
		cout<<i<<" "; 
		fl = 0;
	}
	if(fl)
	{
		cout<<"No important cities."; 
	}
	//for(int i = 1; i <= n; i ++)
	//	for(int j = 1; j <= n; j ++)
	//		cout<<i<<" "<<j<<" "<<f[i][j]<<"\n";
	return 0;
}
/*
4 4
1 2 1
2 3 1
4 1 2
4 3 2
*/ 

回复

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

正在加载回复...