Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstdio>
- #include <cmath>
- #include <algorithm>
- #include <utility>
- #include <cmath>
- #include <vector>
- #define pb push_back
- #define mp make_pair
- #define f first
- #define s second
- const int MXN=8;//1e6;
- using namespace std;
- typedef pair<int,int>PI;
- struct wezel{
- int war,ile,zasieg;
- bool ok;
- };
- vector<pair<int,PI> >kol[MXN+5],kol1[MXN+5];
- int n,m,k,wynik;
- wezel tab[3*MXN];
- int a,b,c;
- void dodaj(int v,int jakiek,int daleko){
- v+=MXN-1;
- if(tab[v].ile==0){
- tab[v].ile=1;
- tab[v].zasieg=daleko;
- tab[v].war=jakiek;
- tab[v].ok=1;
- }
- else{
- tab[v].ile++;
- if(tab[v].zasieg<daleko){
- tab[v].zasieg=daleko;
- tab[v].war=jakiek;
- }
- tab[v].ok=0;
- }
- while(v>0){
- v/=2;
- if(tab[2*v].ok==1&&tab[2*v+1].ok==1&&tab[2*v].war<=tab[2*v+1].war){
- tab[v].ok=1;
- tab[v].war=tab[2*v+1].war;
- tab[v].ile=1;
- }
- else {
- tab[v].ok=0;
- tab[v].ile=0;
- }
- }
- }
- void usun(int v,int jakiek,int daleko){
- v+=MXN-1;
- if(tab[v].ile==1){
- tab[v].ile=0;
- tab[v].zasieg=0;
- tab[v].war=0;
- tab[v].ok=0;
- }
- else if(tab[v].ile==2){
- tab[v].ile--;
- tab[v].ok=1;
- }
- else if(tab[v].ile>2){
- tab[v].ile--;
- }
- while(v>0){
- v/=2;
- if(tab[2*v].ok==1&&tab[2*v+1].ok==1&&tab[2*v].war<=tab[2*v+1].war){
- tab[v].ok=1;
- tab[v].war=tab[2*v+1].war;
- }
- else {
- tab[v].ok=0;
- tab[v].ile=0;
- }
- }
- }
- void count(){
- if(tab[1].ok==1&&tab[1].ile==1)wynik++;
- }
- void ustaw(int v){
- v+=MXN-1;
- tab[v].war=0;
- tab[v].ile=0;
- tab[v].ok=0;
- while(v>0){
- v/=2;
- tab[v].war=0;
- tab[v].ile=0;
- tab[v].ok=0;
- }
- }
- int main(){
- for(int i=1;i<=2*MXN;i++){
- tab[i].war=1e9;
- tab[i].ile=1;
- tab[i].ok=1;
- }
- scanf("%d%d%d",&n,&m,&k);
- for(int i=1;i<=k;i++){
- ustaw(i);
- }
- for(int i=1;i<=m;i++){
- scanf("%d%d%d",&c,&a,&b);
- kol[a].pb(mp(i,mp(b,c)));
- kol1[b].pb(mp(i,mp(a,c)));
- }
- for(int war=1;war<=m;war++){
- for(int i=0;i<kol[war].size();i++){
- a=kol[war][i].s.s;b=kol[war][i].f;c=kol[war][i].s.f;
- dodaj(a,b,c);
- }
- count();
- for(int i=0;i<kol1[war].size();i++){
- a=kol1[war][i].s.s;b=kol1[war][i].f;c=kol1[war][i].s.f;
- usun(a,b,c);
- }
- }
- printf("%d\n",wynik);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement