#include<bits/stdc++.h>
using namespace std;
int n,m;
const int maxn=1e5+7;
int head[maxn];
int degree[maxn];
int p[maxn];
struct {
int v,next;
}e[maxn];
int cnt;
void add(int u,int v){
e[cnt].v=v;
e[cnt].next=head[u];
head[u]=cnt++;
}
queue<int> q;
void tp(){
int check=0;
int ct=0;
for(int i=1;i<=n;i++){
if(degree[i]==0) q.push(i),check++;
}
while(!q.empty()){
int tm=q.front();
q.pop();
for(int i=head[tm];i!=-1;i=e[i].next){
int tmp=e[i].v;
degree[tmp]--;
p[tmp]=max(p[tmp],p[tm]+1);
if(degree[tmp]==0) q.push(tmp),check++;
}
}
}
int main(){
memset(head,-1,sizeof head);
cin>>n>>m;
for(int i=1;i<=m;i++){
int a,b;
cin>>a>>b;
add(b,a);
degree[a]++;
}
for(int i=1;i<=n;i++) p[i]=100;
tp();
int ans=0;
for(int i=0;i<=n;i++) ans+=p[i];
if(check==n) cout<<ans;
else cout<<"Unhappy!";
}
计蒜客题目 威虎山上的分配
最新推荐文章于 2024-07-09 19:25:54 发布