Graph Data Structures Problems
Here are the problems you can practice on Graphs:
1. UVa 00599 - The Forrest for the Trees.
2. UVa 10895 - Matrix Transpose
3. UVa 10928 - My Dear Neighbours
4. UVa 11550 - Demanding Dilemma
5. UVa 11991 - Easy Problems from Rujia Liu?
Here is the link to these problems:
Here are my solutions and hints to some of these problems.
Solution and hints
UVa 11991 Easy Problems from Rujia Liu?
Simple. Create an Adjacency matrix.
#include <bits/stdc++.h> | |
using namespace std; | |
int main(int argc, char const *argv[]) { | |
int n, m, d, k; | |
vector<vector<int> > v; | |
while (scanf("%d %d",&n, &m)!=EOF){ | |
v.assign(1000000, vector<int>()); ///////The elements can go at most upto 1000000 | |
int d; | |
for (size_t i = 1; i <= n; i++) { | |
scanf("%d\n", &d); | |
v[d].push_back(i); | |
} | |
for(int i=0;i<m;i++){ | |
scanf("%d %d", &k, &d); | |
if(k-1<v[d].size()) | |
printf("%d\n", v[d][k-1]); | |
else | |
printf("%d\n",0); | |
} | |
} | |
return 0; | |
} |
Uva 10895 Matrix Transpose
Simple. You just need to reverse the rows and columns when inputting the data. Store this in some other container. And once done spit it out :P
#include <bits/stdc++.h> | |
using namespace std; | |
int main(int argc, char const *argv[]) { | |
int m,n; | |
while(scanf("%d %d\n", &m, &n)!=EOF){ | |
vector<vector<pair<int, int> > > ans; | |
ans.assign(n, vector<pair<int, int> >()); | |
for (int i = 0; i < m; i++) { | |
int r; | |
scanf("%d", &r); | |
int col[r]; | |
int value[r]; | |
for (int j = 0; j < r; j++) { | |
scanf("%d", &col[j]); | |
col[j] -=1; | |
} | |
for (int j = 0; j < r; j++) { | |
scanf("%d", &value[j]); | |
} | |
for (int j = 0; j < r; j++) { | |
ans[col[j]].push_back(make_pair(i+1,value[j])); | |
} | |
} | |
cout<<n<<" "<<m<<endl; | |
for (int j = 0; j < n; j++) { | |
cout<<ans[j].size(); | |
for (int k = 0; k < ans[j].size(); k++) { | |
cout<<" "<<ans[j][k].first; | |
} | |
cout<<endl; | |
// cout<<ans[j][0].second; | |
// cout<<ans[j][1].second; | |
for (size_t l = 0; l < ans[j].size(); l++) { | |
if(l!=0) | |
cout<<" "; | |
cout<<ans[j][l].second; | |
} | |
cout<<endl; | |
} | |
} | |
return 0; | |
} |
No comments:
Post a Comment