Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
36299 22级廖思学 【S】T2 C++ 通过 100 876 MS 37960 KB 1781 2025-02-10 20:00:48

Tests(12/12):


#include<bits/stdc++.h> using namespace std; const int N=1e5+10; #define pb push_back int T,n,m,rd[N],rdd[N],ans; bool book[N],v[N],t[N],vis[N]; struct opr{int x,c,y,d;}p[N]; vector<int>e[N]; queue<int>q; void topo(){ for(int i=1;i<=n;i++){if((rd[i]==0&&t[i])||book[i]){q.push(i);vis[i]=1;/*cout<<i<<" "<<rd[i]<<" "<<book[i]<<endl;*/}}//cout<<endl; while(!q.empty()){ int u=q.front();q.pop(); // cout<<u<<" "; if(rd[u]==0&&(!book[u])){ans++;} else {ans+=2;} for(auto v:e[u]){rdd[v]--;if(!vis[v]){q.push(v);vis[v]=1;}} } } void dfs(int u){ vis[u]=1;ans+=2; for(auto v:e[u]){ if(vis[v])continue; dfs(v); } } inline void init(){ for(int i=1;i<=N-5;i++){v[i]=book[i]=t[i]=vis[i]=0;rd[i]=0;e[i].clear();} ans=0; } map<pair<int,int>,bool>mp; signed main(){ scanf("%d",&T); while(T--){ init(); scanf("%d%d",&n,&m); for(int i=1;i<=m;i++){ scanf("%d%d%d%d",&p[i].x,&p[i].c,&p[i].y,&p[i].d); if(p[i].c==1&&p[i].d==1){t[p[i].x]=t[p[i].y]=v[p[i].x]=v[p[i].y]=1;} if(p[i].c==2&&p[i].d==2){t[p[i].x]=t[p[i].y]=book[p[i].x]=book[p[i].y]=1;} if(p[i].c==1&&p[i].d==2){ if(!mp[{p[i].x,p[i].y}]){e[p[i].x].pb(p[i].y);rd[p[i].y]++;} t[p[i].x]=t[p[i].y]=1; } if(p[i].c==2&&p[i].d==1){ if(!mp[{p[i].x,p[i].y}]){e[p[i].y].pb(p[i].x);rd[p[i].x]++;} t[p[i].x]=t[p[i].y]=1; } } for(int i=1;i<=n;i++)rdd[i]=rd[i]; topo(); for(int i=1;i<=n;i++){ if((!vis[i])&&t[i]){dfs(i);ans--;} } printf("%d\n",ans); } return 0; }


测评信息: