c++ Stake 和 queue的用法

来源:互联网 发布:linux vi 跳到指定行 编辑:程序博客网 时间:2024/05/21 11:03

写篇博客,以免忘记。

c++ stack,queue用法分别包含在文件<stack>,<queue>

stack的方法:
push():向容器顶部里插入元素;
pop():是删除容器顶部的元素;
top():返回容器顶部的元素;
size():返回容器的元素个数;
begin():是返回一个位于容器的第一个元素的迭代器;
end():返回一个位于容器的最后一个元素;
empty():检查是否为空

queue的用法,它和stack很像:
back():返回队列最后一个元素引用
empty():检查是否为空的 
front():获得队列最前面一个元素引用
push():在队列尾添加一个数据
pop():删除队列头的一个数据
size():队列中元素个数

附上第一次打stake的程序:

Jzoj4686. 【NOIP2016提高A组8.12】通讯

#include <cstdio>#include <iostream>#include <cmath>#include <algorithm>#include <cstring>#include <stack>#define fo(i,a,b) for (int i=a;i<=b;i++)#define fd(i,a,b) for (int i=a;i>=b;i--)#define N 50005#define INF 2147483647using namespace std;stack<int> S;int t[N*2],last[N*2],next[N*2],value[N*2],dfn[N],low[N],rd[N],Qy[N],l=0;bool bz[N],v[N]; int tot,top,cnt;inline int read(){    int x=0,w=1;    char ch=getchar();    while(ch>'9'||ch<'0'){if(ch=='-')w=-1;ch=getchar();}    while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}    return x*w;}void add(int x,int y,int z){    t[++l]=y;    next[l]=last[x];    value[l]=z;    last[x]=l;}void Tarjan(int x){    S.push(x);    dfn[x]=low[x]=++tot;      bz[x]=true;    for (int k=last[x];k;k=next[k])    {        int v=t[k];        if (dfn[v]==0)         {            Tarjan(v);            low[x]=min(low[v],low[x]);          }           else if (bz[v] && dfn[v]<low[x]) low[x]=dfn[v];    }    if (low[x]==dfn[x])    {        for (int v;1;)        {            v=S.top();            rd[v]=cnt;            bz[v]=false;            S.pop();            if (v==x) break;        }        cnt++;    }}int main(){    int n,m;    while (true)    {        n=read();m=read();        if (n==0 && m==0) break;        fill(last,last+n,0);        l=0,cnt=0,tot=0,top=0;        fo(i,1,m)        {            int x,y,z;            x=read();y=read();z=read();            add(x,y,z);        }        memset(bz,false,sizeof(bz));        memset(dfn,0,sizeof(dfn));        while(!S.empty()) S.pop();        fo(i,0,n-1) if (dfn[i]==0) Tarjan(i);        fo(i,0,cnt-1) Qy[i]=INF;         fo(i,0,n-1)        {            int u=rd[i];            for (int k=last[i];k;k=next[k])            {                int v=rd[t[k]];                if (u!=v) Qy[v]=min(Qy[v],value[k]);                }        }        int Ans=0;        fo(i,0,cnt-1)        {            if (i==rd[0]) continue;            Ans += Qy[i];        }        printf("%d\n",Ans);    }    return 0;}

比较完整的
资料:
Stake

1 0
原创粉丝点击