消息处理器(40
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll     base=233;
const int MAXN=1e4+10;
#define pi  acos(-1.0)
#define INF  0x3f3f3f3f
#define mod   1e9+7
#define lson rt<<1,l,mid
#define endll printf("\n")
#define pii pair<int, int>
#define rson rt*2+1,mid+1,r
#define s1(a) scanf("%d",&a)
#define stop system("pause")
#define lowbit(x)  ((x)&(-x))
#define s2(a,b) scanf("%d %d",&a,&b)
#define mem(a,b) memset(a,b,sizeof(a))
#define s3(a,b,c) scanf("%d %d %d",&a,&b,&c)
int T,n,m;
struct IN 
{
    int u,v,op,t;//
    IN (int uu,int vv,int oo,int tt):u(uu),v(vv),op(oo),t(tt){};
    friend bool operator <(IN a,IN b)
    {
        if(a.t!=b.t) return a.t<b.t;
        return a.op<b.op;
    }
};
priority_queue<IN>q;
int main()
{
    scanf("%d %d\n",&T,&n);
    while(T--)
    {
        while(!q.empty()) q.pop();
        string s;
        for(int i=0;i<n;i++)
        {
            getline(cin,s);
            int len=s.size(),tt=0;
            for(int j=0;j<len;j+=3)
            {
                if(s[j]=='S')
                    q.push(IN(i,s[j+1]-'0',1,tt++));
                else
                    q.push(IN(s[j+1]-'0',i,2,tt++));
            }
        }
        queue<IN>pp[MAXN];
        int size=0;
        while(!q.empty())
        {
            IN tmp=q.top();q.pop();
            int u=tmp.u,v=tmp.v;
            if(tmp.op==1)
            {
                IN tmp2=IN(u,v,1,1);
                if(pp[v].empty())
                {
                    pp[u].push(tmp2);
                    size++;
                }
                else
                {
                    IN tmp3=pp[v].front();
                    if(tmp3.op==2&&tmp3.u==u)
                    {
                        pp[v].pop();
                        if(pp[v].empty()) size--;
                    }
                    else pp[u].push(tmp2);
                }
            }
            else
            {
                IN tmp2=IN(u,v,2,1);
                if(pp[u].empty())
                {
                    pp[v].push(tmp2);
                    size++;
                }
                else
                {
                    IN tmp3=pp[u].front();
                    if(tmp3.op==1&&tmp3.v==v)
                    {
                        pp[u].pop();
                        if(pp[u].empty()) size--;
                    }
                    else pp[v].push(tmp2);
                }
            }
        }
        if(size) printf("1\n");
        else printf("0\n");
    }
    //stop;
    return 0;
}


淦,我是傻子嘛,想到了队列模拟都没想到根本不用判断时间
100分代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll     base=233;
const int MAXN=1e4+10;
#define pi  acos(-1.0)
#define INF  0x3f3f3f3f
#define mod   1e9+7
#define lson rt<<1,l,mid
#define endll printf("\n")
#define pii pair<int, int>
#define rson rt*2+1,mid+1,r
#define s1(a) scanf("%d",&a)
#define stop system("pause")
#define lowbit(x)  ((x)&(-x))
#define s2(a,b) scanf("%d %d",&a,&b)
#define mem(a,b) memset(a,b,sizeof(a))
#define s3(a,b,c) scanf("%d %d %d",&a,&b,&c)
int T,n,m;
struct IN
{
    int u,v,op;//
    IN (int uu,int vv,int oo):u(uu),v(vv),op(oo){};
};
string s;
queue<IN>q[MAXN];
int main()
{
    scanf("%d %d\n",&T,&n);
    while(T--)
    {
        for(int i=0;i<n;i++)
        {
            while(q[i].size()) q[i].pop();
            getline(cin,s);
            int len=s.size();
            int op;
            for(int j=0;j<len;)
            {
                if(s[j]=='S') op=1;
                else if(s[j]=='R') op=2;
                j++;
                int num=0;
                while(s[j]>='0'&&s[j]<='9')
                    num=num*10+s[j]-'0',j++;
                q[i].push(IN(i,num,op));
                j++;
            }
        }
        while(1)
        {
            bool flag=false;
            for(int i=0;i<n;i++)
            {
                if(q[i].empty()) continue;
                IN tmp=q[i].front();
                if(q[tmp.v].empty()) break;
                IN tmp2=q[tmp.v].front();
                if(tmp2.op+tmp.op==3&&tmp2.v==i)
                {
                    q[i].pop();
                    q[tmp.v].pop();
                    flag=true;
                    i--;
                }
            }
            if(!flag) break;
        }
        bool flag=true;
        for(int i=0;i<n;i++)
        {
            if(q[i].size())
            {
                printf("1\n");
                flag=false;break;
            }
        }
        if(flag) printf("0\n");
    }
    return 0;
}

交通规划
单源最短路都这么明显了!不要乱想别的了。。。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll     base=233;
const int MAXN=1e5+10;
#define pi  acos(-1.0)
#define INF  0x3f3f3f3f
#define mod   1e9+7
#define lson rt<<1,l,mid
#define endll printf("\n")
#define pii pair<int, int>
#define rson rt*2+1,mid+1,r
#define s1(a) scanf("%d",&a)
#define stop system("pause")
#define lowbit(x)  ((x)&(-x))
#define s2(a,b) scanf("%d %d",&a,&b)
#define mem(a,b) memset(a,b,sizeof(a))
#define s3(a,b,c) scanf("%d %d %d",&a,&b,&c)
struct Graph
{
    int tot,head[MAXN];
    struct IN{int v,next,w;}edge[MAXN<<1];
    void init(){mem(head,-1);tot=0;}
    void addedge(int u,int v,int w)
    {
        edge[tot].v=v;edge[tot].w=w;
        edge[tot].next=head[u];head[u]=tot++;
    }
    int Start(int u){return head[u];}
    int To(int i){return edge[i].v;}
    int Val(int i){return edge[i].w;}
    int Next(int i){return edge[i].next;}
}G;
int n,m;
int dis[MAXN],vis[MAXN];

void input()
{
    s2(n,m);G.init();
    for(int i=0;i<m;i++)
    {
        int u,v,w;s3(u,v,w);
        G.addedge(u,v,w);
        G.addedge(v,u,w);
    }
}

int cost[MAXN];
int dij(int x)//x=start
{
    priority_queue<pii > q;// 第一关键字为距离,第二关键字为点
    mem(dis,INF);mem(vis,0);
    q.push(make_pair(0,x));
    dis[x]=0;
    while(q.size())
    {
        int u=q.top().second;  //取出点
        q.pop();
        if (vis[u]) continue;
        vis[u]=1;
        for (int i=G.Start(u);~i;i=G.Next(i))
        {
            int v=G.To(i);
            if (dis[v]>dis[u]+G.Val(i))
            {
                dis[v]=dis[u]+G.Val(i);
                cost[v]=G.Val(i);
                //因为更新到某点的最短路肯定是前面的最短路加了一条边(仅仅一条)
                //所以每条边的花费仅仅为新增加的这一条
                q.push(make_pair(-dis[v],v));  
                //入堆,因为需要最小的边所以这里丢进去负值用于排序
            }
            else if(dis[v]==dis[u]+G.Val(i))
                cost[v]=min(cost[v],G.Val(i));//
        }
    }
    int ans=0;
    for(int i=2;i<=n;i++)
        ans+=cost[i];
    return ans;
}
int main()
{
    input();
    mem(cost,0);
    printf("%d\n",dij(1));
    //stop;
    return 0;
}
送货(DFS非递归
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll     base=233;
const int MAXN=1e4+10;
#define pi  acos(-1.0)
#define INF  0x3f3f3f3f
#define mod   1e9+7
#define lson rt<<1,l,mid
#define endll printf("\n")
#define pii pair<int, int>
#define rson rt*2+1,mid+1,r
#define s1(a) scanf("%d",&a)
#define stop system("pause")
#define lowbit(x)  ((x)&(-x))
#define s2(a,b) scanf("%d %d",&a,&b)
#define mem(a,b) memset(a,b,sizeof(a))
#define s3(a,b,c) scanf("%d %d %d",&a,&b,&c)
//原始数据
int n,m;
set<int>g[MAXN];
//判断连通性
int pre[MAXN],du[MAXN];
int fund(int x){return x==pre[x]?x:pre[x]=fund(pre[x]);}
void join(int x,int y){pre[fund(x)]=fund(y);}
//求欧拉路
stack<int>path;
bool vis[MAXN][MAXN];
int nxt(int u)
{
    set<int>::iterator it;
    for(it=g[u].begin();it!=g[u].end();it++)
        if(!vis[u][*it]) return *it;
    return -1;
}
void dfs(int s)
{
    stack<int>st;
    st.push(s);
    while(!st.empty())
    {
        int u=st.top();
        int v=nxt(u);
        if(v!=-1)
        {
            vis[u][v]=vis[v][u]=true;
            st.push(v);
        }
        else
        {
            st.pop();
            path.push(u);
        }
    }
}
int main()
{
    s2(n,m);
    for(int i=0;i<=n;i++) pre[i]=i,du[i]=0;
    for(int i=0;i<m;i++)
    {
        int u,v;s2(u,v);
        g[u].insert(v);
        g[v].insert(u);
        if(fund(u)!=fund(v))
            join(u,v);
        du[u]++;du[v]++;
    }
    //判断连通性
    int cnt=0,tag=0;
    for(int i=1;i<=n;i++)
    {
        if(i==pre[i]) cnt++;
        if(du[i]%2) tag++;
    }
    if(cnt>1||(tag!=0&&tag!=2)) 
    {
        printf("-1\n");
        return 0;
    }
    //
    mem(vis,0);
    dfs(1);
    while(!path.empty())
    {
        printf("%d ",path.top());
        path.pop();
    }
    endll;
    //stop;
    return 0;
}
游戏(BFS
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll     base=233;
const int MAXN=1e6+10;
#define pi  acos(-1.0)
#define INF  0x3f3f3f3f
#define mod   1e9+7
#define lson rt<<1,l,mid
#define endll printf("\n")
#define pii pair<int, int>
#define rson rt*2+1,mid+1,r
#define s1(a) scanf("%d",&a)
#define stop system("pause")
#define lowbit(x)  ((x)&(-x))
#define s2(a,b) scanf("%d %d",&a,&b)
#define mem(a,b) memset(a,b,sizeof(a))
#define s3(a,b,c) scanf("%d %d %d",&a,&b,&c)

int n,m,t;
struct I
{
    int a,b;
}lim[111][111];
struct IN
{
    int x,y,t;
    IN(){};
    IN(int xx,int yy,int tt):x(xx),y(yy),t(tt){};
};
int dx[4]={0,0,1,-1};
int dy[4]={-1,1,0,0};
bool vis[110][110][333];
int check(int x,int y,int t)
{
    if(x<=0||y<=0||x>n||y>m||vis[x][y][t]) return 0;
    if(lim[x][y].a<=t&&lim[x][y].b>=t) return 0;
    return 1;
}
int bfs()
{
    queue<IN>q;
    q.push(IN(1,1,0));
    vis[1][1][0]=true;
    while(q.size())
    {
        int x=q.front().x,y=q.front().y,t=q.front().t;
        q.pop();
        for(int i=0;i<4;i++)
        {
            int nx=x+dx[i],ny=y+dy[i],nt=t+1;
            if(check(nx,ny,nt))
            {
                if(nx==n&&ny==m) return nt;
                vis[nx][ny][nt]=true;
                q.push(IN(nx,ny,nt));
            }
        }
    }
    return -1;
}
int main()
{
    s3(n,m,t);
    mem(lim,-1);mem(vis,false);
    for(int i=0;i<t;i++)
    {
        int r,c,a,b;s2(r,c);s2(a,b);
        lim[r][c].a=a,lim[r][c].b=b;
    }
    printf("%d\n",bfs());
    //stop;
    return 0;
}