• 2020 campday-5-B


    题解

    操作倒着来,则当前操作不会影响之后的操作,

    对于每次操作更新答案 ans[ui]=ans[vi]=ans[ui]+ans[vi]-(ans[ui] 并 ans[vi])

    对于二者并集,即是上一次合并时的ans (ps:上一次二者合并,ans相同即为这次操作的并集),记录一下即可

    #include <cstdio>
    
    #define RE register
    #define FOR(i,a,b) for(RE int i=a;i<=b;++i)
    #define ROF(i,a,b) for(RE int i=a;i>=b;--i)
    #define sc(n) scanf("%d",&n)
    
    using namespace std;
    
    const int maxn=5e5+10;
    
    int n,m,a[maxn],b[maxn],c[maxn],t[maxn],ans[maxn];
    
    int main()
    {
        sc(n),sc(m);ans[n]=1;
        FOR(i,1,n-1)sc(a[i]),sc(b[i]),ans[i]=1;
        FOR(i,1,m)sc(c[i]);
        ROF(i,m,1)ans[a[c[i]]]=ans[b[c[i]]]=t[c[i]]=ans[a[c[i]]]+ans[b[c[i]]]-t[c[i]];
        FOR(i,1,n-1)printf("%d ", ans[i]);printf("%d",ans[n]);
        return 0;
    }
    

      

  • 相关阅读:
    redis--pipelining管道
    插入排序
    选择排序
    冒泡排序
    网页表格导入导出Excel
    easyUI的datagrid表格的使用
    软件工程实践总结(个人)
    Beta答辩总结
    Beta冲刺7
    Beta冲刺6
  • 原文地址:https://www.cnblogs.com/2aptx4869/p/12203561.html
Copyright © 2020-2023  润新知