zoukankan      html  css  js  c++  java
  • hdu 4496 其实还是并查集

    
    
    Problem Description
    
    
    Luxer is a really bad guy. He destroys everything he met. 
    One day Luxer went to D-city. D-city has N D-points and M D-lines. Each D-line connects exactly two D-points. Luxer will destroy all the D-lines. The mayor of D-city wants to know how many connected blocks of D-city left after Luxer destroying the first K D-lines in the input. 
    Two points are in the same connected blocks if and only if they connect to each other directly or indirectly.
    
    
     
    
    
    Input
    
    
    First line of the input contains two integers N and M. 
    Then following M lines each containing 2 space-separated integers u and v, which denotes an D-line. 
    Constraints: 
    0 < N <= 10000 
    0 < M <= 100000 
    0 <= u, v < N. 
    
    
     
    
    
    Output
    
    
    Output M lines, the ith line is the answer after deleting the first i edges in the input.
    
    
     逆向思维的重要性!

    #include<cstdio> #include<iostream> #include<string.h> #include<stack> #define maxn 10005
    using namespace std; int pre[maxn]; int num; void init() { for(int i=0;i<maxn;i++) pre[i]=i; } int find(int x) { if(pre[x]==x) return x; else return pre[x]=find(pre[x]); } void merge(int x,int y) { x=find(x); y=find(y); if(x!=y) { num--; pre[y]=x; } } int main() { cin.sync_with_stdio(false); int n,m; while(cin>>n>>m) { stack<int> fuck,fuck2; int ret[m]; while(m--) { int x,y; cin>>x>>y; fuck.push(x),fuck.push(y); } init(); num=n; int rett=0; while(!fuck.empty()) { int yy=fuck.top(); fuck.pop(); int xx=fuck.top(); fuck.pop(); ret[rett++]=num; merge(xx,yy); } for(int i=rett-1;i>=0;i--) cout<<ret[i]<<endl; } return 0; }
  • 相关阅读:
    python3 连接HBase
    xgb 绘制
    手机UA识别
    meta常用标签总结
    window.requestAnimationFrame() ,做逐帧动画,你值得拥有
    三年从前端小工到架构-知乎 Live 学习整理
    SEO配置信息操作文档
    函数常见的写法及调用方法整理
    电脑中‘落雪’木马病毒如何解决
    Nuxt学习笔记
  • 原文地址:https://www.cnblogs.com/z1141000271/p/5791194.html
Copyright © 2011-2022 走看看