Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- void dfs(map<int,vector<int>> &hm,vector<int> &door,int K, int src,int par,int count,int *totalLastroom,map<int,int> &room){
- if(door[src]==1){
- count++;
- }
- if(count>K){
- return;
- }
- if(hm[src].size()==1 && src!=1 && count<=K){
- (*totalLastroom)++;
- room[src] = count;
- return;
- }
- for(auto i : hm[src]){
- if(i!=par){
- dfs(hm,door,K,i,src,count,totalLastroom,room);
- }
- }
- }
- void roomsReached(int N, int K, vector<int> &door, vector<pair<int,int>> &edge){
- map<int,vector<int>> hm;
- for(int i=0;i<N-1;i++){
- hm[edge[i].first].push_back(edge[i].second);
- hm[edge[i].second].push_back(edge[i].first);
- }
- int totalLastRoom = 0;
- map<int,int> lastRoomReached;
- dfs(hm,door,K,1,-1,0,&totalLastRoom,lastRoomReached);
- cout<<totalLastRoom<<endl;
- for(auto i : lastRoomReached){
- cout<<i.first<<" "<<i.second<<endl;
- }
- }
- int main(){
- int N,K;
- cin>>N>>K;
- vector<int> door(N+1);
- for(int i=1;i<=N;i++){
- cin>>door[i];
- }
- vector<pair<int,int>> edge(N-1);
- for(int i=0;i<N-1;i++){
- int U,V;
- cin>>U>>V;
- edge[i] = make_pair(U,V);
- }
- roomsReached(N,K,door,edge);
- }
Advertisement
Add Comment
Please, Sign In to add comment