Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
AC了,没AC的这里有代码。。。#include <algorithm> #include <iostream> #include <string> #include <bitset> #include <cstdio> #include <cmath> #include <sstream> #include <queue> #include <list> #include <stack> using namespace std; vector<vector<int>> mat_g; int n,m; vector<int> v_g; int topo_order(int n) { vector<vector<int>> mat_g_b; mat_g_b = mat_g; bool b_re = true; v_g.clear(); for(int cnt=0;cnt<n;cnt++) { vector<int> v_l; for(int cnt=0;cnt<n;cnt++) { int pos = 0; bool b_first = true; for(int cnt_in=0;cnt_in<n;cnt_in++) { if (mat_g[cnt_in][cnt] == 1) { b_first = false; break; } } if (b_first) { v_l.push_back(cnt); } } if (v_l.size() == v_g.size() + 1) { for(int cnt_l=0;cnt_l<v_l.size();cnt_l++) { bool b_out = true; for(int cnt_g=0;cnt_g<v_g.size();cnt_g++) { if (v_g[cnt_g] == v_l[cnt_l]) { b_out = false; break; } } if (b_out) { v_g.push_back(v_l[cnt_l]); break; } } } else { b_re = false; for(int cnt_l=0;cnt_l<v_l.size();cnt_l++) { bool b_out = true; for(int cnt_g=0;cnt_g<v_g.size();cnt_g++) { if (v_g[cnt_g] == v_l[cnt_l]) { b_out = false; break; } } if (b_out) { v_g.push_back(v_l[cnt_l]); break; } } } for(int cnt=0;cnt<v_l.size();cnt++) { for(int cnt_in=0;cnt_in<n;cnt_in++) { mat_g[v_l[cnt]][cnt_in] = 0; mat_g[cnt_in][v_l[cnt]] = 0; } } } for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { if (mat_g[i][j] == 1) { mat_g = mat_g_b; return 2; } } } if (v_g.size() == n && b_re == true) { mat_g = mat_g_b; return 4; } else { mat_g = mat_g_b; if (b_re == false) return 3; else return 1; } } int main() { int num_case; while(cin>>n>>m) { vector<int> v_g_b; mat_g.clear(); mat_g.resize(30); for(int cnt=0;cnt<30;cnt++) { mat_g[cnt].resize(30); } if (n==0 && m==0) break; int b_output = 700; for(int cnt=1;cnt<=m;cnt++) { string str; cin>>str; mat_g[str[0]-'A'][str[2] - 'A'] = 1; int re = topo_order(n); if (re == 2 && b_output == 700) { b_output =600; cout<<"Inconsistency found after "<<cnt<<" relations."<<endl; } else if (re == 4 && b_output > 600) { b_output = cnt; v_g_b = v_g; } } if (b_output == 700) { cout<<"Sorted sequence cannot be determined."<<endl; } else if (b_output < 600) { cout<<"Sorted sequence determined after "<<b_output<<" relations: "; for(int cnt=0;cnt<v_g_b.size();cnt++) { cout<<(char)(v_g_b[cnt]+'A'); } cout<<"."<<endl; } } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator