题目链接:https://www.jisuanke.com/course/1451/83475
原来vector的clear函数并不释放内存…
vector<int>k;
k.swap(amap[b]);
swap括号内的是要释放的vector地址,爆内存wa掉两次,以下是ac代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n, m, a, b;
scanf("%d%d",&n,&m);
vector<int> amap[n+5];
for(int i = 0; i < n; i++)
amap[i].push_back(i + 1);
while(m--)
{
scanf("%d%d",&a,&b);
if(a != b)
{
a--;
b--;
for(int i = 0; i < amap[b].size(); i++)
amap[a].push_back(amap[b][i]);
vector<int>k;
k.swap(amap[b]);
}
else
;
}
for(int i = 0; i < n; i++)
{
if(amap[i].empty())
;
else
{
int j;
for(j = 0; j < amap[i].size(); j++)
{
printf("%d",amap[i][j]);
if( j != amap[i].size() - 1)
printf(" ");
}
}
printf("\n");
}
return 0;
}