超时了N长时间,最后检查发现是数据量大,我的算法不够好的缘故。for循环里的比较操作多了一次,直接导致超时,优化掉这一次操作,时间锐减到400ms。。。
TIPS:1.memset,很方便将一段内存置为同一个值的方法,C语言扔了这么多年,这个函数感觉好面生。
2.cin,cout确实比scanf,printf要慢上一些。
3.把数组定义放在循环里面也是不明智的行为,因为反复申请释放内存也需要花很多时间。
#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;
int t[1000][1000];
int du[1000];
int main() {
int n, m, f, c, i, j, count;
cin >> n;
while (n--) {
cin >> m;
memset(t, 0, sizeof(t));
memset(du, 0, sizeof(du));
for (i = 0; i < m - 1; i++) {
cin >> f >> c;
t[f][c] = 1;
t[c][f] = 1;
du[f]++;
du[c]++;
}
count = m;
for (i = 0; i < m; i++) {
int d = du[i];
if (d == 0) {
count--;
continue;
}
for (j = 0; j < m; j++) {
if (t[i][j]) {
if(du[j] > d) {
count--;
break;
}
}
}
}
cout << count << endl;
}
return 0;
}