Pat练习
1539.等重路径
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
using namespace std;
const int N = 110;
int w[N];
int h[N],e[N],ne[N],idx;
int n,m,s;
vector<vector<int>> ans;
void add(int a,int b){
e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}
void dfs(int u,int k,vector<int> &path){
if(h[u]==-1){
if(k==s) ans.push_back(path);
return ;
}
for(int i=h[u];i!=-1;i=ne[i]){
int j=e[i];
path.push_back(w[j]);
dfs(j,k+w[j],path);
path.pop_back();
}
}
int main(){
memset(h, -1, sizeof h);
cin>>n>>m>>s;
for(int i=0;i<n;i++) cin>>w[i];
for(int i=0;i<m;i++){
int id,cnt;
cin>>id>>cnt;
while(cnt--){
int x;
cin>>x;
add(id,x);
}
}
vector<int> path;
path.push_back(w[0]);
dfs(0,w[0],path);
sort(ans.begin(),ans.end());
reverse(ans.begin(),ans.end());
for(int i=0;i<ans.size();i++)
{
for(int j=0;j<ans[i].size();j++)
cout<<ans[i][j]<<" ";
cout<<endl;
}
return 0;
}
1540.主导颜色
#include <iostream>
#include <unordered_map>
using namespace std;
int main(){
unordered_map<int,int> hash;
int m,n;
cin>>m>>n;
for(int i=0;i<m;i++)
for(int j=0;j<n;j++){
int x;
cin>>x;
hash[x]++;
if(hash[x]>m*n/2){
cout<<x<<endl;
return 0;
}
}
return 0;
}
等重路径这么简单的题竟然做了好几次没写成,太不应该了