题目链接:ZOJ 3710 Friends
数据范围只有100,暴利可解,不过用vector超时了。
后来改成数组一直WA,队友改了下就过了,我没感觉出来两种写法的差异,诡异。
WA:
#include <iostream>
#include <cstring>
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
const int MAX_N = 100 + 10;
int vis[MAX_N][MAX_N];
int main()
{
//freopen("in.txt", "r", stdin);
int T;
scanf("%d", &T);
while(T--)
{
memset(vis, 0, sizeof(vis));
int n, m, k, u, v, _max = 0;
scanf("%d%d%d", &n, &m, &k);
for(int i = 0; i < m; i++)
{
scanf("%d%d", &u, &v);
vis[u][v] = vis[v][u] = 1;
_max = max(_max, max(u, v));
}
int s1, s2, s3 = 0, s4 = 0;
for(int i = 0; i <= _max; i++)
{
for(int j = i + 1; j <= _max; j++)
{
if(vis[i][j] == 1)
continue;
s3 = 0;
for(int p = 0; p <= _max; p++)
{
if(vis[i][p] == vis[j][p] && vis[i][p] == 1)
s3++;
}
if(s3 >= k)
{
vis[i][j] = vis[j][i] = 1;
s4++;
i = -1;
break;
}
}
}
printf("%d\n", s4);
}
return 0;
}
AC:
#include <iostream>
#include <cstring>
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
const int MAX_N = 100 + 10;
int vis[MAX_N][MAX_N];
int main()
{
//freopen("in.txt", "r", stdin);
int T;
scanf("%d", &T);
while(T--)
{
memset(vis, 0, sizeof(vis));
int n, m, k, u, v, _max = 0;
scanf("%d%d%d", &n, &m, &k);
for(int i = 0; i < m; i++)
{
scanf("%d%d", &u, &v);
vis[u][v] = vis[v][u] = 1;
// _max = max(_max, max(u, v));
}
int s1, s2, s3 = 0, s4 = 0;
for(int i = 0; i < n; i++)
{
for(int j = i + 1; j < n; j++)
{
if(vis[i][j] == 1)
continue;
s3 = 0;
for(int p = 0; p < n; p++)
{
if(vis[i][p] == vis[j][p] && vis[i][p] == 1)
s3++;
}
if(s3 >= k)
{
vis[i][j] = vis[j][i] = 1;
s4++;
i = -1;
break;
}
}
}
printf("%d\n", s4);
}
return 0;
}