1 条题解
-
0
C :
#include<stdio.h> void main(){puts("Task0 Task1 Task2 Task3");}
C++ :
#include<stdio.h> #include<string.h> #include<ctype.h> #include<string> #include<queue> #include<map> #include<vector> using namespace std; char str[100006]; string task[100000]; int in[100000]; int n; class cmp { public: bool operator()(int a,int b) const { return task[a]>task[b]; } }; map<string,int> mm; priority_queue<int,vector<int>,cmp> pq; vector<int> l[100000]; int getIndex(char *s) { map<string,int>::iterator it=mm.find(string(s)); if (it==mm.end()) { int ret=mm.size(); task[ret]=string(s); mm.insert(make_pair(task[ret],ret)); return ret; } return it->second; } int main() { while(scanf("%d",&n)!=EOF) { mm.clear(); for(int i=0;i<n;i++) l[i].clear(),in[i]=0; for(int i=0;i<n;i++) { scanf("%s",str); char *p=strtok(str,"(,)"); int t=getIndex(p); while(p=strtok(NULL,"(,)")) { if (!strcmp(p,"NULL")) continue; int t1=getIndex(p); l[t].push_back(t1); in[t1]++; } } for(int i=0;i<n;i++) if (!in[i]) pq.push(i); int first=1; while(!pq.empty()) { if (first) first=0; else putchar(' '); int cur=pq.top(); pq.pop(); printf("%s",task[cur].c_str()); for(int i=0;i<l[cur].size();i++) { if (!--in[l[cur][i]]) pq.push(l[cur][i]); } } puts(""); } return 0; }
Java :
import java.util.*; import java.util.concurrent.LinkedBlockingQueue; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); while(in.hasNext()) { String ns = in.nextLine(); int n = Integer.valueOf(ns); int[][] a = new int[n][n]; boolean[] wasVisit = new boolean[n]; for(int i=0;i<n;i++) { String s = in.nextLine(); int x = s.indexOf("("); String s1 = s.substring(4,x); int curc = Integer.valueOf(s1); s = s.substring(x+1,s.length()-1); if(s.length()<=4) continue; String[] ss = s.split(","); for(int j=0;j<ss.length;j++) { int curr = Integer.valueOf(ss[j].substring(4,ss[j].length())); a[curr][curc] = 1; } } Queue<Integer> q = new LinkedBlockingQueue<>(); while(q.size()<n) { for(int i=0;i<n;i++) { if(wasVisit[i]) continue; boolean b = true; for(int j=0;j<n;j++) { if(a[i][j]==1) { b = false; break; } } if(b) { q.add(i); wasVisit[i] = true; for(int j=0;j<n;j++) a[j][i] = 0; break; } } } System.out.print("Task"+q.remove()); while(!q.isEmpty()) { System.out.print(" Task"+q.remove()); } System.out.println(); } } }
- 1
信息
- ID
- 1291
- 时间
- 1000ms
- 内存
- 32MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者