8.16

#include <iostream>
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn = 105;
queue<char> v[maxn]; ///存储每个轨道上的物品
stack<char> s;  ///
queue<char> q;  ///结果输出
int main()
{
    int N,M,S;
    int a[1005];
    char ch;
    cin>>N>>M>>S;
    getchar();
    for(int i=1;i<=N;i++){
        for(int j=0;j<M;j++){
            cin>>ch;
            v[i].push(ch);
            a[i]++;
        }
        getchar();
    }
    int x;
    while(true){
        cin>>x;
        if(x==-1)break;
        if(x==0){
            if(s.size()==0)continue;    //如果筐里面的为空就不做任何处理,跳过
            else{
                q.push(s.top());        //否则,弹出栈顶元素,放入流水线上
                s.pop();
            }
        }
        if(x>=1 && x<=N){
            if(v[x].size()==0)continue;        //如果对应轨道上没有物品了不做任何处理,跳过
            else{
                if(s.size()==S){    //如果筐已经满了,就弹出筐顶物品到流水线上,再将物品放入框中
                    q.push(s.top());
                    s.pop();
                }
                s.push(v[x].front());
                v[x].pop();
            }
        }
    }
    /*
    for(int i=0;i<N;i++){
        for(int j=0;j<M;j++){
            cout<<v[i][j];
        }
    }
    */
    while(!q.empty()){
        cout<<q.front();
        q.pop();
    }
    return 0;
}
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1e4 + 10,M=1000010;
int h[N],e[M],ne[M],idx;
int n;
int cnt;
bool vis[N];
vector<int> temp,ans;
void add(int a,int b){
    e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}
void dfs(int u,int sum){
    if(sum>cnt){
        cnt=sum;
        ans=temp;
    }
    else if(sum==cnt&&temp<ans){
        ans=temp;
    }
    for(int i=h[u];~i;i=ne[i]){
        int j=e[i];
        temp.push_back(j);
        dfs(j,sum+1);
        temp.pop_back();
    }
}
int main()
{
    memset(h,-1,sizeof h);
    cin>>n;
    for(int i=0;i<n;i++){
        int k;
        cin>>k;
        while(k--){
            int a;
            cin>>a;
            add(i,a);
            vis[a]=true;
        }
    }
    int root=0;
    while(vis[root])root++;
    dfs(root,1);
    cout<<cnt<<endl;
    cout<<root;
    for(int i=0;i<ans.size();i++){
        cout<<' '<<ans[i];
    }
    return 0;
}

 

posted @ 2023-08-16 19:39  徐星凯  阅读(20)  评论(0编辑  收藏  举报