General
 
 
# Author Problem Lang Verdict Time Memory Sent Judged  
188549664 Practice:
DaiRuiChen007
1494D - 9 C++14 (GCC 6-32) Accepted 78 ms 6296 KB 2023-01-09 09:36:04 2023-01-09 09:36:04
→ Source
// LUOGU_RID: 99122385
#include<bits/stdc++.h>
using namespace std;
const int MAXN=1001;
struct node {
	int u,v,w;
	inline friend bool operator <(const node &A,const node &B) {
		return A.w<B.w;
	}
};
vector <node> edges;
vector <int> G[MAXN];
int w[MAXN][MAXN],id[MAXN],val[MAXN],dsu[MAXN];
bool del[MAXN];
inline int find(int x) {
	if(dsu[x]==x) return x;
	return dsu[x]=find(dsu[x]);
}
signed main() {
	int n;
	scanf("%d",&n);
	for(int i=1;i<=n;++i) dsu[i]=i;
	for(int i=1;i<=n;++i) {
		for(int j=1;j<=n;++j) {
			scanf("%d",&w[i][j]);
			if(i<j) edges.push_back((node){i,j,w[i][j]});
			if(i==j) val[i]=w[i][i];
		}
	}
	sort(edges.begin(),edges.end());
	int siz=n;
	for(auto e:edges) {
		int x=find(e.u),y=find(e.v);
		if(x==y) continue;
		if(val[x]==e.w&&val[y]==e.w) {
			del[y]=true,dsu[y]=x;
			for(int i:G[y]) G[x].push_back(i);
			G[y].clear();
		} else if(val[x]==e.w) {
			dsu[y]=x;
			G[x].push_back(y);
		} else if(val[y]==e.w) {
			dsu[x]=y;
			G[y].push_back(x);
		} else {
			dsu[x]=dsu[y]=++siz;
			dsu[siz]=siz,val[siz]=e.w;
			G[siz].push_back(x),G[siz].push_back(y);
		}
	}
	int idcnt=0;
	for(int i=1;i<=siz;++i) if(!del[i]) id[i]=++idcnt;
	printf("%d\n",idcnt);
	for(int i=1;i<=siz;++i) if(!del[i]) printf("%d ",val[i]); puts("");
	printf("%d\n",idcnt);
	for(int i=1;i<=siz;++i) {
		if(del[i]) continue;
		for(int j:G[i]) printf("%d %d\n",id[j],id[i]);
	}
	return 0;
}
?
Time: ? ms, memory: ? KB
Verdict: ?
Input
?
Participant's output
?
Jury's answer
?
Checker comment
?
Diagnostics
?
Click to see test details