codeforce1005F

题解:咕咕

字符串没学过各种错?还有vector越界。。。。

考试的时候这样就完了。。。。

最究极原因还是懒。。。无法快速换策略。

希望明天模拟赛能改进吧。。。

#include<bits/stdc++.h>
using namespace std;
const long long M=3e6;
#define ll long long
struct re{
    ll v;
    ll nex;
};
re edge[M];
ll d[M],n,m,k,tot=0,cnt=0,f[M],a[M],b[M];
void ad(ll x,ll y){
    cnt++;
    edge[cnt].nex=f[x];
    edge[cnt].v=y;
    f[x]=cnt;
}
void bfs(){
    queue<ll>ss;
    ss.push(1);
    while(ss.empty()!=1){
    int az=ss.front();
    ll k=f[az];
    while(k!=-1){
    int x=edge[k].v;
    if(d[x]==-1){d[x]=d[az]+1;ss.push(x);}
    k=edge[k].nex;
    }
    ss.pop();
    }
}
ll js[M+1];
int main()
{    //freopen("p.in","r",stdin);
    cin>>n>>m>>k;
    memset(f,-1,sizeof(f));
    for(int i=1;i<=m;i++){
    cin>>a[i]>>b[i];
    ad(a[i],b[i]);
    ad(b[i],a[i]);
    }
    memset(d,-1,sizeof(d));
    d[1]=0;
    bfs();
    vector<ll>q[m+3];
    for(int i=1;i<=m;i++){
    if(d[a[i]]==d[b[i]]+1)q[a[i]].push_back(i);
    if(d[b[i]]==d[a[i]]+1)q[b[i]].push_back(i);
    }
    for(int i=1;i<=n;i++)js[i]=0;
    vector<string>ans;
    for(int i=1;i<=k;i++){
    string s(m,'0');
    tot++;
    bool az=1;
    for(int j=2;j<=n;j++){
    int x=q[j][js[j]];
    s[x-1]='1';
    }
    //for(int j=0;j<m;j++)cout<<s[j];
    //cout<<endl;
    for(int j=1;j<=n;j++)
    if(js[j]+1<q[j].size()){
        az=0;
        js[j]++;
        break;
    } else js[j]=0;
    ans.push_back(s);
    //cout<<s<<endl;
//    cout<<q[1][0]<<endl;
    if(az)break;
    }
    cout<<tot<<endl;
    for(int i=0;i<tot;i++)
    cout<<ans[i]<<endl;
    return 0;
}
View Code

 

posted @ 2018-09-15 08:22  周栎  阅读(256)  评论(0编辑  收藏  举报