bnuoj 49100超级线段树并查集

来源:互联网 发布:高级数据安全工程师 编辑:程序博客网 时间:2024/05/18 01:10

题目链接点这里

并查集的神奇应用,,,,



#include<cstdio>#include<cstring>#include<set>#include<stack>#include<stdlib.h>#include<time.h>#include<iostream>#include<math.h>#include<math.h>#include<algorithm>#include<queue>using namespace std;#define MX 1111111#define INF 0x3f3f3f3f#define mem(x,y) memset(x,y,sizeof(x))#define fuck(x) cout<<x<<endltypedef long long LL;typedef pair<int,int > PII;int n,m;int E[MX][3];inline int read(){    int ret=0,c,f=1;    for(c=getchar(); !(isdigit(c)||c=='-'); c=getchar());    if(c=='-') f=-1,c=getchar();    for(; isdigit(c); c=getchar()) ret=ret*10+c-'0';    if(f<0) ret=-ret;    return ret;}int bin[MX];int col[MX];int _find(int x){    int t=x;    while(t!=bin[t])    {        t=bin[t];    }    while(x!=bin[x])    {        x=bin[x];        bin[x]=t;    }    return t;}int main(){    int _;    _=read();    while(_--)    {        mem(col,0);        n=read();        m=read();        for(int i=1; i<=n+1; i++) bin[i]=i;        for(int i=1; i<=m; i++)        {            int l,r,type;            E[i][0]=read();            E[i][1]=read();            E[i][2]=read();        }        for(int i=m; i>=1; i--)        {            for(int j=_find(E[i][0]); j<=E[i][1]; j=_find(j))            {                col[j]=E[i][2];                bin[j]=j+1;            }        }        for(int i=1; i<=n; i++)printf("%d\n",col[i]);    }    return 0;}


0 0