• 国庆 day 7 下午


    思路:见博客

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #define MAXN 100001
    using namespace std;
    int n,cnt,ans;
    struct nond{
        int col,num;
    }v[MAXN],bns[MAXN];
    int cmp(nond a,nond b){
        if(a.col==b.col)    return a.num<b.num;
        return a.col<b.col;
    }
    int main(){
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
            scanf("%d%d",&v[i].col,&v[i].num);
        sort(v+1,v+1+n,cmp);
        for(int i=1;i<=n;i++)
            if(v[i-1].col!=v[i].col||v[i-1].num!=v[i].num)
                bns[++cnt]=v[i];
        for(int i=1;i<=cnt;i++){
            int tmp=0;
            for(int j=i;j>=1;j--)
                if(bns[i].col==bns[j].col&&bns[i].num-bns[j].num+1<=n)
                    tmp++;
                else break; 
            if(tmp>ans)    ans=tmp;
        }
        cout<<n-ans;
    }
    View Code

     

    思路:f[i]表示状态i最后一次出现的位置。

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #define MAXN 100100
    using namespace std;
    int n,ans;
    int f[MAXN];
    int main(){
        freopen("test.in","r",stdin);
        freopen("test.out","w",stdout);
        scanf("%d",&n);
        for(int i=1;i<=n;i++){
            int a,b;
            scanf("%d%d",&a,&b);
            int tmp=a;ans=0;
            while(tmp){
                if(f[tmp]<i-b)    ans++;
                f[tmp]=i;
                tmp=a&(tmp-1);
            }
            cout<<ans<<endl;
        }    
    }
    View Code

    思路:tarjin缩点+spfa跑最长路。

    #include<map>
    #include<queue>
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #define MAXN 500100
    using namespace std;
    queue<int>que;
    map<int,int>ma[MAXN];
    int n,m,S,p;
    int tot,tot1,ans;
    int tim,top,sumcol;
    int vis[MAXN],dis[MAXN];
    int w[MAXN],col[MAXN],val[MAXN];
    int to[MAXN],net[MAXN],head[MAXN];
    int to1[MAXN],net1[MAXN],head1[MAXN];
    int dfn[MAXN],low[MAXN],stack[MAXN],visstack[MAXN];
    void add(int u,int v){
        to[++tot]=v;net[tot]=head[u];head[u]=tot;
    }
    void add1(int u,int v){
        to1[++tot1]=v;net1[tot1]=head1[u];head1[u]=tot1;
    }
    void tarjin(int now){
        low[now]=dfn[now]=++tim;
        stack[++top]=now;
        vis[now]=1;
        visstack[now]=1;
        for(int i=head[now];i;i=net[i])
            if(visstack[to[i]])
                low[now]=min(low[now],dfn[to[i]]);
            else if(!vis[to[i]]){
                tarjin(to[i]);
                low[now]=min(low[now],low[to[i]]);
            }
        if(dfn[now]==low[now]){
            sumcol++;
            col[now]=sumcol;
            while(stack[top]!=now){
                visstack[stack[top]]=0;
                col[stack[top]]=sumcol;
                top--;
            }
            visstack[now]=0;
            top--;
        }
    }
    void spfa(int s){
        memset(vis,0,sizeof(vis));
        memset(dis,0,sizeof(dis));
        while(!que.empty())    que.pop();
        que.push(s);
        vis[s]=1;dis[s]=val[s];
        while(!que.empty()){
            int now=que.front();
            que.pop();
            vis[now]=0;
            for(int i=head1[now];i;i=net1[i])
                if(dis[to1[i]]<dis[now]+val[to1[i]]){
                    dis[to1[i]]=dis[now]+val[to1[i]];
                    if(!vis[to1[i]]){
                        vis[to1[i]]=1;
                        que.push(to1[i]);
                    } 
                }
        }
    }
    int main(){
        freopen("save.in","r",stdin);
        freopen("save.out","w",stdout);
        scanf("%d%d",&n,&m);
        for(int i=1;i<=m;i++){
            int u,v;
            scanf("%d%d",&u,&v);
            add(u,v);
        }    
        for(int i=1;i<=n;i++)
            if(!vis[i])
                tarjin(i);
        for(int i=1;i<=n;i++){
            scanf("%d",&w[i]);
            val[col[i]]+=w[i];
        }
        for(int i=1;i<=n;i++)
            for(int j=head[i];j;j=net[j])
                if(col[i]!=col[to[j]])
                    if(ma[col[i]].find(col[to[j]])==ma[col[i]].end()){
                        ma[col[i]][col[to[j]]]=1;
                        add1(col[i],col[to[j]]);
                    }
        scanf("%d%d",&S,&p);
        spfa(col[S]);
        for(int i=1;i<=p;i++){
            int x;
            scanf("%d",&x);
            ans=max(ans,dis[col[x]]);
        }
        cout<<ans<<endl;
    }
    /*
    6 7
    1 2
    2 3
    3 5
    2 4
    4 1
    2 6
    6 5
    10
    12
    8
    16
    1
    5
    1 4
    4 3 5 6
    */
    View Code
    细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。 雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。
  • 相关阅读:
    从JAVA看C#中volatile和synchronized关键字的作用
    SSAS动态添加分区 (转载)
    IIS7的集成模式下如何让自定义的HttpModule不处理静态文件(.html .css .js .jpeg等)请求
    SqlServer Analysis Service的事实维度关系
    SqlServer分区表概述(转载)
    SQL2005中的事务与锁定(九)-(1)- 转载
    SQL2005中的事务与锁定(八)- 转载
    SQL2005中的事务与锁定(七)
    LINUX下编译ffmpeg-x264出现的错误及解决转
    从ffmpeg源代码分析如何解决ffmpeg编码的延迟问题 (转)
  • 原文地址:https://www.cnblogs.com/cangT-Tlan/p/7642559.html
Copyright © 2020-2023  润新知