File Transfer(25 分)
来源:互联网 发布:网络男孩与女孩的故事 编辑:程序博客网 时间:2024/04/29 17:27
05-树8 File Transfer(25 分)
We have a network of computers and a list of bi-directional connections. Each of these connections allows a file transfer from one computer to another. Is it possible to send a file from any computer on the network to any other?
Input Specification:
Each input file contains one test case. For each test case, the first line contains N (2≤N≤104), the total number of computers in a network. Each computer in the network is then represented by a positive integer between 1 and N. Then in the following lines, the input is given in the format:
I c1 c2
where I
stands for inputting a connection between c1
and c2
; or
C c1 c2
where C
stands for checking if it is possible to transfer files between c1
and c2
; or
S
where S
stands for stopping this case.
Output Specification:
For each C
case, print in one line the word "yes" or "no" if it is possible or impossible to transfer files between c1
and c2
, respectively. At the end of each case, print in one line "The network is connected." if there is a path between any pair of computers; or "There are k
components." where k
is the number of connected components in this network.
Sample Input 1:
5C 3 2I 3 2C 1 5I 4 5I 2 4C 3 5S
Sample Output 1:
nonoyesThere are 2 components.
Sample Input 2:
5C 3 2I 3 2C 1 5I 4 5I 2 4C 3 5I 1 3C 1 5S
Sample Output 2:
nonoyesyesThe network is connected.
本题还可以做路径压缩等优化,本人并没有,请见陈 越老师详解
#include<iostream>
#include<vector>using namespace std;
struct node{
int data;
int parent=-1;
};
int size;
int Find(vector<node> &set,int data){
int q=data-1;
while(set[q].parent>0)
q=set[q].parent;
return q;
}
void connect(vector<node> &set,int i,int j){
int m=Find(set,i);
int n=Find(set,j);
if(set[m].parent<set[n].parent){
set[m].parent+=set[n].parent; set[n].parent=m;
}
else {set[n].parent+=set[m].parent; set[m].parent=n;}
}
void query(vector<node> &set,int i,int j){
int m=Find(set,i); int n=Find(set,j);
if(m==n) cout<<"yes"<<endl;
else cout<<"no"<<endl;
}
int main(){
int i=1,j,num; cin>>size;
num=size;
vector<node> set(size);
for(int p=0;p<size;p++)
set[p].data=p+1;
string str; cin>>str;
while(str!="S"){
if(str=="C"){
cin>>i>>j;
query(set,i,j);
}
else{
cin>>i>>j;
connect(set,i,j);
num--;
}
cin>>str;
}
if(num==1)
cout<<"The network is connected."<<endl;
else
cout<<"There are "<<num<<" components."<<endl;
return 0;
}
- File Transfer(25 分)
- 7-26 File Transfer(25 分)
- 05-树8 File Transfer(25 分)
- 05-树8 File Transfer(25 分)
- 05-树8 File Transfer (25分)
- 05-树8 File Transfer (25分)
- 05-树9 File Transfer (25分)
- 05-树9 File Transfer (25分)
- 5-8 File Transfer (25分)
- 05-树9 File Transfer (25分)
- 05-树8 File Transfer (25分)
- 05-树8 File Transfer (25分)
- 05-树8 File Transfer (25分)
- 05-树8 File Transfer (25分)
- 05-树8 File Transfer (25分)
- 5-1 File Transfer (25分)
- 05-树8 File Transfer (25分)---并查集
- 5-1 File Transfer (30分)
- iOS 设计模式~门面模式 demo
- 递归重建二叉树的思路
- mybatis(错误一) 项目启动时报“Result Maps collection already contains value forxxx”的解决方案
- STL中heap学习
- 2017-2018 ACM-ICPC, NEERC, Northern Subregional Contest
- File Transfer(25 分)
- LeetCode 42. Trapping Rain Water
- UEFI + GPT双硬盘安装win10和Ubuntu16.04双系统
- 894B. Ralph And His Magic Field
- 关于坦克大战—子弹与瓦片碰撞问题的一些感想
- 生活小记49
- 洛谷 1219 八皇后 【DFS】
- 通用对账系统介绍与设计(上)
- 725. Split Linked List in Parts。