题目链接:https://qduoj.com/problem/22/点击打开链接
生化危机
发布时间: 2015年10月10日 18:05 时间限制: 1000ms 内存限制: 256M
X博士想造福人类, 研发一种可以再生肢体的药物, 可是很不幸......研究失败了, 他在蜥蜴身上实验的时候, 蜥蜴发生了变异, 更糟糕的是, 蜥蜴逃出了生化实验室.
恐怖的事情发生了, 疫情以X博士所在的城市为中心向四周扩散开, 最终, 整个地球上的城市都被感染了.假设整个地球一共有N个城市, 这N个城市是连通的, 有N-1条通道把他们连接起来.病毒会以一座城市为中心,在一天的时间内, 会把和他相连的周围的所有城市感染. 那么, 多少天的时间, 整个地球的城市都感染呢?
第一行输入一个T(T <= 50), 表示一共有T组测试数据.
每组数据第一行两个数n, k. n表示有n(2 <= n <= 10000)个城市, 代表城市1-n, k是X博士所在的城市.
接下来n-1行, 每行有两个数u, v, 表示城市u和v之间有一条通道.
每组数据第一行输出第一个数 x , 表示整个地球感染需要x天.
接下来 x 个数, 第i个数表示第i天感染了城市的数量.
(注意, 每组数据第二行每个数据后边都有一个空格)
2 3 1 1 2 2 3 3 2 1 2 2 3
3 1 1 1 2
题目连接:https://qduoj.com/problem/166/点击打开链接
ycb老师的电脑中毒了
发布时间: 2017年6月18日 21:38 最后更新: 2017年6月18日 21:41 时间限制: 1000ms 内存限制: 128M
spring老师开发了一个新的电脑病毒,他想试一下这个病毒的威力,于是他在ycb的电脑上植入了这个病毒,但是可怕的事情发生了,这个病毒的威力超过了spring老师的想象,开始在实验室的电脑里不断传播,最终,整个实验室的电脑都被传播了,人们都以为是ycb干的,于是让ycb老师赔偿,真是惨。
假设整个实验室一共有N台电脑, 这N台电脑是连通的, 有N-1条通道把他们连接起来.病毒会以ycb的电脑为中心,在一小时的时间内, 会把和他相连的周围的所有电脑感染. 那么, 几个小时的时间, 整个实验室的电脑都将被感染呢?
第一行输入一个T(T <= 50), 表示一共有T组测试数据.
每组数据第一行两个数n, k. n表示有n(2 <= n <= 10000)台电脑, 代表电脑1-n, k是ycb的电脑.
接下来n-1行, 每行有两个数u, v, 表示电脑u和v之间有一条通道.
每组数据第一行输出第一个数 x , 表示整个实验室感染需要x天.
接下来 x 个数, 第i个数表示第i天感染电脑的数量.
(注意, 每组数据第二行每个数据后边都有一个空格)
2 3 1 1 2 2 3 3 2 1 2 2 3
3 1 1 1 2 1 2
用set判重(可能复杂度比较高) num计数
#include <stdio.h>
#include <queue>
#include <stack>
#include <iostream>
#include <math.h>
#include <limits.h>
#include <string.h>
#include <algorithm>
#include <string>
#include <set>
using namespace std;
vector<int >book[11111];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n;int k;
set< int > s;
memset(book,0,sizeof(book));
int over[11111];
int num[11111];
memset(num,0,sizeof(num));
memset(over,0,sizeof(over));
scanf("%d%d",&n,&k);
for(int i=0;i<n-1;i++)
{
int x;int y;
scanf("%d%d",&x,&y);
book[x].push_back(y);
book[y].push_back(x);
}
queue <int >q;
q.push(k);
int ii=1;
s.insert(k);
num[0]=1;
while(1)
{
if(q.empty())
break;
else
{
int temp[11111];
int j=0;
while(!q.empty())
{
temp[j]=q.front();
q.pop();
j++;
}
int sum=0;
for(int i=0;i<j;i++)
{
for(int l=0;l<book[temp[i]].size();l++)
if(!s.count(book[temp[i]][l]))
{
q.push(book[temp[i]][l]);
s.insert(book[temp[i]][l]);
sum++;
}
}
num[ii]=sum;
ii++;
}
}
int sum=0;
printf("%d\n",ii-1);
for(int i=0;i<ii-1;i++)
printf("%d ",num[i]);
printf("\n");
}
}