QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#623945#8943. Challenge Matrix MultiplicationCoffinsTL 0ms0kbC++141.5kb2024-10-09 14:26:282024-10-09 14:26:30

Judging History

你现在查看的是最新测评结果

  • [2024-10-09 14:26:30]
  • 评测
  • 测评结果:TL
  • 用时:0ms
  • 内存:0kb
  • [2024-10-09 14:26:28]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5;
using pii=pair<int,int>;
int n,m,ct=0;vector<int> edge[N];
int deg[N];set<pii> s;
int fr[N];vector<int> vc;
bool vs[N];int f[N];
int main()
{
    cin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        int x,y;cin>>x>>y;
        edge[x].push_back(y);
        deg[x]++,deg[y]--;
    }for(int i=1;i<=n;i++)
    ct+=abs(deg[i]),s.insert({-deg[i],i});
    while(1)
    {
        int tot=0;for(int i=1;i<=n;i++)
        tot+=!f[i];if(!tot)continue;
        int u=s.begin()->second,v=u;
        for(int i=1;i<=n;i++)fr[i]=0;
        queue<int> q;q.push(u);vc.clear();
        while(!q.empty())
        {
            int u=q.front();q.pop();
            if(deg[u]<0){v=u;break;}
            for(auto v:edge[u])
            if(!fr[v])fr[v]=u,q.push(v);
        }s.erase({-deg[u],u}),deg[u]--;
        s.insert({-deg[u],u});
        s.erase({-deg[v],v}),deg[v]++;
        s.insert({-deg[v],v});
        while(v!=u)vc.push_back(v),
        v=fr[v];vc.push_back(u);
        int sz=vc.size(),ct=0;
        while(!q.empty())q.pop();
        for(int i=1;i<=n;i++)vs[i]=0;
        for(int i=0;i<sz;i++)
        {
            q.push(vc[i]);vs[vc[i]]=1;
            while(!q.empty())
            {
                int u=q.front();
                ct++;q.pop();
                for(auto v:edge[u])
                if(!vs[v])q.push(v),vs[v]=1;
            }f[vc[i]]=ct;
        }
    }for(int i=1;i<=n;i++)cout<<f[i]<<' ';
    cout<<'\n';return 0;
}

詳細信息

Test #1:

score: 0
Time Limit Exceeded

input:

4 6
1 3
2 3
2 4
1 2
1 3
1 3

output:


result: