我实在不知道我错在哪里了,大佬帮忙康康CCCCCCCOrz
查看原帖
我实在不知道我错在哪里了,大佬帮忙康康CCCCCCCOrz
117658
Space_Gold_Trash楼主2020/7/3 19:52

就是一个差分约束系统

floyed实现

挺水的,求康康

#include<bits/stdc++.h>
using namespace std;
char s[60];
int minn[60][60],maxx[60][60];
int main( ){
	int n,A,B,i,j;
	cin>>n>>A>>B;
	for(i=1;i<=n;i++){
		cin>>(s+1);
		for(j=1;j<=n;j++)
		if(s[j]=='+'){
			minn[i][j]=1;
			maxx[i][j]=2;
		}else if(s[j]=='-'){
			minn[i][j]=-2;
			maxx[i][j]=-1;
		}else if(s[j]=='=')minn[i][j]=maxx[i][j]=0;
		else{
			minn[i][j]=-2;
			maxx[i][j]=2;
		}
		minn[i][i]=maxx[i][i]=0;
	}
	int k;
	for(k=1;k<=n;k++)
	for(i=1;i<=n;i++)
	for(j=1;j<=n;j++)
	minn[i][j]=max(minn[i][j],minn[i][k]+minn[k][j]),maxx[i][j]=min(maxx[i][j],maxx[i][k]+maxx[k][j]);
	int c1=0,c2=0,c3=0;
	for(i=1;i<=n;i++){
		if(i==A||i==B)continue; 
		for(j=1;j<i;j++){
			if(j==A||j==B)continue;
			if(minn[i][A]>maxx[j][B]||minn[i][B]>maxx[j][A])c1++;
			if(minn[A][i]>maxx[B][j]||minn[B][i]>maxx[A][j])c3++;
			if((minn[A][i]==maxx[A][i]&&minn[B][j]==maxx[B][j]&&minn[A][i]==minn[B][j])
			||
			(minn[A][j]==maxx[A][j]&&minn[B][i]==maxx[B][i]&&minn[B][i]==minn[A][j]))c2++;
		}
	}
	cout<<c1<<" "<<c2<<" "<<c3<<endl;
}
2020/7/3 19:52
加载中...