Total Submissions: 226 (73 users) Accepted: 53 (49 users)
[ My Solution]
3 4
2 1
1 3
#include<stdio.h>
#include<string.h>
int c[100002];
#define MAXN 100005
#define MAXE 400005
struct Edge{
int node;
int next;
}edge[MAXE];
int head[MAXN], cnt;
void add(int a, int b)
{
edge[cnt].next = head[a], edge[cnt].node = b; head[a] = cnt++;
}
int ans[MAXN];
int vis[MAXN];
void fun(int i)
{
ans[cnt++] = i;
vis[i] = 1;
for(int j = head[i]; ~j; j = edge[j].next)
{
if(!(--c[edge[j].node]))
fun(edge[j].node);
}
return ;
}
int main()
{
int n,m;
while(scanf("%d %d",&n,&m)!=EOF){
memset(c,0,sizeof(c));
memset(vis, 0, sizeof(vis));
//memset(s,0,sizeof(s));
int i,a,b;
memset(head, -1, sizeof(head));
cnt = 0;
for(i=0;i<m;i++){
scanf("%d %d",&a,&b);
add(a, b);
// printf("%d %d\n",edge[cnt].node,edge[cnt].next);
c[b]++;
}
cnt = 0;
for(i=1;i<=n;i++)
{
if(!c[i] && !vis[i])
{
fun(i);
}
}
if(cnt != n)
printf("-1\n");
else
{
printf("%d", ans[0]);
for(i = 1; i < cnt; ++i)
printf(" %d", ans[i]);
printf("\n");
}
}
return 0;
}
/*邻接表*/
#include<stdio.h>
#include<malloc.h>
#include<queue>
using namespace std;
int m,n;
const int mmax=100100;
struct haha
{
int son;
struct haha *nextson;
}*e[mmax];
int in[mmax],ans[mmax];
void add_edge(int x,int y)
{
struct haha *p;
p=(struct haha *)malloc(sizeof(struct haha));
p->son=y;
p->nextson=e[x];
e[x]=p;
}
int main()
{
int i,x,y,num,cnt;
while(scanf("%d %d",&n,&m)!=EOF)
{
num=n;cnt=0;
for(i=1;i<=n;i++)
{
e[i]=NULL;
in[i]=0;
}
for(i=1;i<=m;i++)
{
scanf("%d %d",&x,&y);
add_edge(x,y);
in[y]++;
}
priority_queue<int,vector<int>,greater<int> >duilie;//注意这里要把》 》 分开 写
for(i=1;i<=n;i++)
if(in[i]==0) duilie.push(i);
while(!duilie.empty())
{
x=duilie.top();
duilie.pop();
ans[cnt++]=x;
struct haha *p;
p=e[x];
while(p!=NULL)
{
if(--in[p->son]==0) duilie.push(p->son);
p=p->nextson;
}
}
if(cnt!=n) {printf("-1\n");continue;}
for(i=0;i<cnt-1;i++)
printf("%d ",ans[i]);
printf("%d\n",ans[cnt-1]);
}
return 0;
}