刚看这题,嘿嘿,一定能水过,结果才11分(啊啊啊啊啊啊啊)
查看原帖
刚看这题,嘿嘿,一定能水过,结果才11分(啊啊啊啊啊啊啊)
873786
wangjiajinself楼主2023/12/24 13:57
#include <iostream>
using namespace std;
const long long N=0x7f7f7f7f7f7f7f7f;
int w,n,m,u[1001],v[1001];
long long a[101][101],wI[1001];
int main() {
	
	cin>>w;
	while(w--)
	{
		bool b=true;
		cin>>n>>m;
		for(int i=1;i<=n;i++)
				for(int j=1;j<=n;j++)
				a[i][j]=N;
		for(int i=1;i<=m;i++) 
		{
			cin>>u[i]>>v[i]>>wI[i];
		}
		for(int i=1;i<=m;i++)
		{
			if(a[u[i]][v[i]]!=N&&a[u[i]][v[i]]!=wI[i]) {
				b=false;
				break;
			}
			a[u[i]][v[i]]=wI[i];
			for(int j=1;j<=u[i]-1;j++) 
			if(a[j][u[i]-1]+a[u[i]][v[i]]!=a[j][v[i]]&&a[j][v[i]]!=N&&a[j][u[i]-1]!=N) {
				b=false;
				break;
			}
			if(!b) {
				break;
			}
			for(int j=v[i]+1;j<=n;j++)
			if(a[u[i]][v[i]]+a[v[i]+1][j]!=a[u[i]][j]&&a[v[i]+1][j]!=N&&a[u[i]][j]!=N) {
				b=false;
				break;
			}
			if(!b) {
				break;
			}
		}
		if(!b) cout<<"false"<<endl;
		if(b) cout<<"true"<<endl;
	}
	return 0;
}

思路就是弄个数组记u到v的值

2023/12/24 13:57
加载中...