倒数第二个点WA求助
查看原帖
倒数第二个点WA求助
128388
星之哀伤楼主2023/10/24 08:42
#include<bits/stdc++.h>
using namespace std;
struct node{
	int gu;
	bool k;
}a[101][101];
vector <int> q[101];
int lu[101];
bool lu1[101],lu2[101];
int tot=1,k1,ji;
void cl2(int f){
	lu1[f]=1;
	for(int i=0;i<q[f].size();i++){
		int y=q[f][i];
		if(a[f][y].k==1&&lu1[y]==0) lu[tot]=y,tot++,cl2(y);
	}
}
void cl3(int m,int n){
	lu2[m]=1;
			for(int k=0;k<q[m].size();k++){
				int y=q[m][k];
				ji+=a[y][n].gu;
				if(lu2[y]!=1)
				cl3(y,n);
			}
}
 int main(){
	freopen("P1475_8.in","r",stdin);
	int n;
	cin>>n;
	for(int i=1;i<=100;i++){
		a[i][i].k=1;
	}
	for(int a1,b,w,i=1;i<=n;i++){
		cin>>a1>>b>>w;
		a[a1][b].gu=w;
		if(w>50){
		a[a1][b].k=1;
		q[a1].push_back(b);
		}
	}
	for(int i=1;i<=100;i++){
		memset(lu1,0,sizeof(lu1));
		tot=1;
		memset(lu,0,sizeof(lu));
		cl2(i);
		for(int j=1;j<=tot;j++){
			a[i][lu[j]].k=1;
		}
	}
	for(int i=1;i<=100;i++){
		for(int j=1;j<=100;j++){
			if(a[i][j].k==1) continue;
			ji=a[i][j].gu;
			cl3(i,j);
			if(ji>50) a[i][j].k=1,q[i].push_back(j),a[i][j].gu=ji;
			ji=0;
			memset(lu2,0,sizeof(lu2));
		}
	}
	for(int i=1;i<=100;i++){
		for(int j=1;j<=100;j++){
			if(a[i][j].k==1&&i!=j) cout<<i<<" "<<j<<endl;
		}
	}
	return 0;
}

码风有点丑,用的向量加二维数组

2023/10/24 08:42
加载中...