比赛 |
不平凡的世界 |
评测结果 |
EWWWWTTTTT |
题目名称 |
不平凡的许愿树 |
最终得分 |
0 |
用户昵称 |
sro dydxh orz |
运行时间 |
32.467 s |
代码语言 |
C++ |
内存使用 |
110.55 MiB |
提交时间 |
2015-11-05 11:08:04 |
显示代码纯文本
/*30% floyed*/
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
int n,map[5010][5010],p[10010],bh[10000100],nb,num,vis[101][101][101];
bool flag[10010];
void floyed(){
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++){
if(map[i][j]>map[i][k]+map[k][j])
map[i][j]=map[i][k]+map[k][j];
}
/*for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++){
int b=p[i],c=p[j];
cout<<b<<' '<<c<<' '<<map[b][c]<<endl;
}*/
}
int main(){
freopen("hopetree.in","r",stdin);
freopen("hopetree.out","w",stdout);
memset(map,10,sizeof(map));
scanf("%d",&nb);
for(int i=1;i<=nb;i++){
int a,b;
scanf("%d%d",&a,&b);
if(!flag[a]) {p[++n]=a;bh[a]=n;flag[a]=1;}
if(!flag[b]) {p[++n]=b;bh[b]=n;flag[b]=1;}
map[bh[a]][bh[b]]=1;
map[bh[b]][bh[a]]=1;
}
floyed();
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(i==j) continue;
for(int l=1;l<=n;l++){
if(l==i||l==j) continue;
if(map[i][j]==map[i][l]&&map[i][l]==map[l][j])
if(vis[j][i][l]==1||vis[i][j][l]==1||vis[j][l][i]==1||
vis[i][l][j]==1||vis[l][j][i]==1||vis[l][i][j]==1) continue;
else{
cout<<p[i]<<' '<<p[j]<<' '<<p[l]<<endl;
vis[j][i][l]=1;vis[i][j][l]=1;vis[j][l][i]=1;
vis[i][l][j]=1;vis[l][j][i]=1;vis[l][i][j]=1;
num++;
}
}
}
}
//cout<<num<<endl;
cout<<num%338+1<<' '<<(num+233)%338+1<<endl;
return 0;
}