拆边+BFS队列骚操作——cf1209F

Posted zsben991126

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了拆边+BFS队列骚操作——cf1209F相关的知识,希望对你有一定的参考价值。

这个拆边+队列操作实在是太秒了

队列头结点存的是一个存点集的vector,1到这个点集经过的路径权值是一样的,所以向下一层拓展时,先依次走一遍每个点的0边,再走1边。。。以此类推,能保证最后走出来的路径是最优的

/*
拆边+将每个点的边按权值排序+BFS 
*/
#include<bits/stdc++.h>
#include<vector>
using namespace std;
#define N 1000005
#define ll long long 
#define mod 1000000007

ll n,m;
struct Edgell v,w;;
//bool operator<(Edge&a,Edge&b)return a.w<b.w;
vector<int>G[N][10];
vector<int>q[N];//队列里面是一堆结点

ll ans[N],vis[N];

int main()
    cin>>n>>m;int nn=n;
    for(int i=1;i<=m;i++)
        int u,v;
        cin>>u>>v;
        int w[6]=,len=0,t=i;
        while(t)
            w[++len]=t%10;t/=10;
        
        int l=1,r=len;
        while(l<r)
            swap(w[l],w[r]);
            ++l,--r;
        
        
        int pre=u;
        for(int j=1;j<=len;j++)
            int newnode;
            if(j==len)newnode=v;
            else newnode=++n;
            G[pre][w[j]].push_back(newnode);
            pre=newnode;
        
        pre=v;
        for(int j=1;j<=len;j++)//反向边也要反着加 
            int newnode;
            if(j==len)newnode=u;
            else newnode=++n;
            G[pre][w[j]].push_back(newnode);
            pre=newnode; 
        
    
    
    int head=0,tail=0;
    q[++tail].push_back(1);vis[1]=1;
    for(;head<=tail;head++)
        for(int i=0;i<=9;i++)//先走队列头结点所有元素的0... 
            int flag=0;
            for(auto u:q[head])
                for(auto v:G[u][i])if(!vis[v])
                    vis[v]=flag=1;
                    q[tail+1].push_back(v);
                    ans[v]=(ans[u]*10+i)%mod;
                
            
            if(flag)tail++;            
        
     
     
    
    for(int i=2;i<=nn;i++)
    cout<<ans[i]<<\n;

 

 

以上是关于拆边+BFS队列骚操作——cf1209F的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces 1209F Koala and Notebook

聊一聊 Promise中then方法的各种骚操作

剑指 Offer 59 - II. 队列的最大值(queue+deque骚操作)

剑指 Offer 59 - II. 队列的最大值(queue+deque骚操作)

[M最短路] lc1129. 颜色交替的最短路径(bfs最短路+拆点+拆边+好题)

Java进阶之光!满满的骚操作