13号晚和童鞋一起从学校叫车去了火车站,下楼之前的十分钟还在玩阴阳师,表示肝疼。。
然后在火车站旁边吃了些kfc就上火车了,免费旅游的感觉还是美滋滋的。
火车上和隔壁某学校的童鞋在同一趟车,然后看到了传说中的拿了金牌的妹子,感觉自己真的是菜得抠脚。
火车大概坐了20+个小时抵达杭州,杭州绿化还是很漂亮的,很早就想到杭州看一看,没想到会以比赛的形式来到的杭州。
到的第一天,先去旅馆附近吃了一餐当地菜,感受了传说中的东坡肉,然而吃了后发现跟扣肉并没有什么区别。
第二天比赛的时候,一堆童鞋在食堂门口堵路等了好久的饭票,有点搞笑!
开始比赛的时候,做了几道简单题,感觉还是比较水,然后看了并查集那一题,花了挺多时间发现竟然做不出,自己的并查集还是理解太浅,
花了挺多时间也没找到问题,find1才是找其的根节点,而pre仅仅是找其父节点!!但最后还是靠骗数据过了一点分。
想想自己还是太菜,很多题都不会啊。
L2-024部落:
#include<iostream>
#include <stdio.h>
#include <string.h>
#include<stdlib.h>
#include <map>
#include <set>
#include <queue>
#include <math.h>
#include <algorithm>
using namespace std;
int pre[10500];
void init(int n){
for(int i=1;i<=n;i++)
pre[i]=i;
}
int find1(int x){
int y=x;
while(x!=pre[x]){
x=pre[x];
}
int z=y;
while(pre[z]!=x){
y=pre[z];
pre[z]=x;
z=y;
}
return x;
}
int find2(int x,int y){
int c1=find1(x);
int c2=find1(y);
if(c1!=c2){
pre[c2]=c1;
}
}
bool walked[10500];
bool walked2[10500];
int main(){
//freopen("in.txt","r",stdin);
int i,j,k,f1,f2,f3,t1,t2,t3,n,m;
cin >> n;
init(10400);
memset(walked,0,sizeof(walked));
memset(walked2,0,sizeof(walked2));
int max1=0;
for(i=1;i<=n;i++){
cin >> t1;
cin >> t2;
if(walked[t2]==0){
max1++;
walked[t2]=1;
}
for(j=2;j<=t1;j++){
cin >> t3;
if(walked[t3]==0){
walked[t3]=1;
max1++;
}
find2(t2,t3);
}
}
cin >> m;
f1=0;
for(i=1;i<=10400;i++){
if(walked[i]==1&&walked2[find1(i)]==0){
f1++;
walked2[find1(i)]=1;
}
}
cout << max1 << " " << f1 << endl;
for(j=1;j<=m;j++){
cin >> t1 >> t2;
if(find1(t1)!=find1(t2)){
cout <<"N"<<endl;
}else{
cout << "Y" <<endl;
}
}
return 0;
}