【每周算法】第八周:图的存储
笔记
以下动画来自deepseek
Luogu B3643 图的存储
这题有点模板了,但还有警示一下,如果你样例全过,但过评测机的时候就全WA,请看看邻接表输出的要求
#include<bits/stdc++.h>
using namespace std;
const int N = 1010;
bool a[N][N];
vector<int>tu[N];
int main(){
int n,m;
cin >> n >> m;
for(int i = 1;i <= m;i++){
int u,v;
cin >> u >> v;
a[u][v] = true;
a[v][u] = true;
tu[u].push_back(v);
tu[v].push_back(u);
}
for(int i = 1;i <= n;i++){
for(int j = 1;j <= n;j++){
cout << a[i][j] << " ";
}
cout << "\n";
}
for(int i = 1;i <= n;i++){
cout << tu[i].size() << " ";
sort(tu[i].begin(),tu[i].end());
for(int g:tu[i]){
cout << g << " ";
}
cout << "\n";
}
return 0;
}
Luogu B3613 图的存储与出边的排序
这题也是一道比较简单的题目
#include<bits/stdc++.h>
using namespace std;
const int N = 5e5+10;
vector<int>tu[N];
int main(){
// freopen("1.in","r",stdin);
int t;
cin >> t;
while(t--){
int n,m;
cin >> n >> m;
for(int i = 1;i <= m;i++){
int u,v;
cin >> u >> v;
tu[u].push_back(v);
}
for(int i = 1;i <= n;i++){
sort(tu[i].begin(),tu[i].end());
for(int g:tu[i]){
cout << g << " ";
}
cout << "\n";
tu[i].clear();
}
}
return 0;
}
Luogu B3852 出边排序 2
其实还挺简单的,如果你TLE 80 pts(使用 memeset重置w的值),可以尝试不修改w的值(输入时会覆盖掉)或使用for循环修改w的值
#include<bits/stdc++.h>
using namespace std;
const int N = 5e5+10;
vector<int>tu[N];
int w[N];
bool cmp(int x,int y){
if(w[x] != w[y]){
return w[x]<w[y];
}
return x<y;
}
int main(){
// freopen("1.in","r",stdin);
int t;
cin >> t;
while(t--){
int n,m;
cin >> n >> m;
for(int i = 1;i <= n;i++){
cin >> w[i];
}
for(int i = 1;i <= m;i++){
int u,v;
cin >> u >> v;
tu[u].push_back(v);
}
for(int i = 1;i <= n;i++){
stable_sort(tu[i].begin(),tu[i].end(),cmp);
for(int g:tu[i]){
cout << g << " ";
}
cout << "\n";
tu[i].clear();
}
}
return 0;
}