#include<bits/stdc++.h> using namespace std; #define f first #define s second const int mil=1000*1000; vector<int> tab[mil]; int main(){ int n, r, w ,t; int wyn=0; cin>>n; vector<pair<pair<int, int>, int> > k1, k2; for(int i=0; i<n; i++){ cin>>r>>w>>t; if(r==1) k1.push_back({{w ,t}, i}); if(r==2) k2.push_back({{t, w}, i}); } for(int i=0; i<k1.size(); i++){ for(int j=0; j<k2.size(); j++){ if(k1[i].f.f+k2[j].f.f==k1[i].f.s+k2[j].f.s){tab[k1[i].s].push_back(k2[j].s); tab[k2[j].s].push_back(k1[i].s);} } } //for(int i=0; i<n; i++){ // cout<<i<<": "; // for(int j=0; j<tab[i].size(); j++){ // cout<<tab[i][j]<<" "; // } //cout<<"\n"; //} //return 0; priority_queue<pair <int, int> >wek; for(int i=0; i<n; i++)if(tab[i].size()>0)wek.push({tab[i].size(), i}); //while(!wek.empty()){ // pair<int, int> p=wek.top(); // cout<<"\n"<<p.f<<" "<<p.s; // wek.pop(); //} // //return 0; while(!wek.empty()){ pair<int, int> p=wek.top(); //cout<<"\n"<<p.f<<" "<<p.s; wek.pop(); if(tab[p.s].size()==p.f && p.f>0){ // cout<<"\n"<<p.s<<" "<<p.f; wyn++; for(int i=0; i<tab[p.s].size(); i++){ int z=tab[p.s][i]; for(int j=0; j<tab[z].size(); j++){ if(tab[z][j]==p.s){ tab[z].erase(tab[z].begin()+j); break; } } wek.push({tab[z].size()-1, tab[p.s][i]}); } tab[p.s].clear(); } } cout<<wyn; //for(int i=0; i<n; i++)if(tab[i].size()==1 && tab[tab[i][0]].size()==1){ // w++; // tab[tab[i][0]].clear(); // tab[i].clear(); //} // //szukaj(); return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | #include<bits/stdc++.h> using namespace std; #define f first #define s second const int mil=1000*1000; vector<int> tab[mil]; int main(){ int n, r, w ,t; int wyn=0; cin>>n; vector<pair<pair<int, int>, int> > k1, k2; for(int i=0; i<n; i++){ cin>>r>>w>>t; if(r==1) k1.push_back({{w ,t}, i}); if(r==2) k2.push_back({{t, w}, i}); } for(int i=0; i<k1.size(); i++){ for(int j=0; j<k2.size(); j++){ if(k1[i].f.f+k2[j].f.f==k1[i].f.s+k2[j].f.s){tab[k1[i].s].push_back(k2[j].s); tab[k2[j].s].push_back(k1[i].s);} } } //for(int i=0; i<n; i++){ // cout<<i<<": "; // for(int j=0; j<tab[i].size(); j++){ // cout<<tab[i][j]<<" "; // } //cout<<"\n"; //} //return 0; priority_queue<pair <int, int> >wek; for(int i=0; i<n; i++)if(tab[i].size()>0)wek.push({tab[i].size(), i}); //while(!wek.empty()){ // pair<int, int> p=wek.top(); // cout<<"\n"<<p.f<<" "<<p.s; // wek.pop(); //} // //return 0; while(!wek.empty()){ pair<int, int> p=wek.top(); //cout<<"\n"<<p.f<<" "<<p.s; wek.pop(); if(tab[p.s].size()==p.f && p.f>0){ // cout<<"\n"<<p.s<<" "<<p.f; wyn++; for(int i=0; i<tab[p.s].size(); i++){ int z=tab[p.s][i]; for(int j=0; j<tab[z].size(); j++){ if(tab[z][j]==p.s){ tab[z].erase(tab[z].begin()+j); break; } } wek.push({tab[z].size()-1, tab[p.s][i]}); } tab[p.s].clear(); } } cout<<wyn; //for(int i=0; i<n; i++)if(tab[i].size()==1 && tab[tab[i][0]].size()==1){ // w++; // tab[tab[i][0]].clear(); // tab[i].clear(); //} // //szukaj(); return 0; } |