problemscpp
A collection of my answers to algorithm problems in c++.
函数
acwing::acwing848_408 命名空间参考

  1. 有向图的拓扑序列
更多...

函数

int main (istream &cin, ostream &cout)
 
 TEST (acwing848_408, case1)
 
 TEST (acwing848_408, case2)
 
 TEST (acwing848_408, case3)
 
 TEST (acwing848_408, case4)
 

详细描述

  1. 有向图的拓扑序列

函数说明

◆ main()

int acwing::acwing848_408::main ( istream &  cin,
ostream &  cout 
)

在文件 acwing408.cpp846 行定义.

846 {
847 ostringstream oss;
848 int n, m;
849 cin >> n >> m;
850 vector<unordered_set<int>> g = vector<unordered_set<int>>(n + 1, unordered_set<int>());
851 vector<short> in = vector<short>(n + 1, 0);
852 while(m--) {
853 int x, y;
854 cin >> x >> y;
855 if(g[x].find(y) != g[x].end())
856 continue;
857 g[x].insert(y);
858 in[y]++;
859 }
860 bool flag = true;
861 while(flag) {
862 for(int i = 1; i <= n; i++) {
863 if(in[i] == 0) {
864 flag = false;
865 oss << i << ' ';
866 for(int j: g[i]) {
867 in[j]--;
868 }
869 in[i] = -1;
870 }
871 }
872 if(flag) {
873 break;
874 }
875 flag = true;
876 }
877 for(int i = 1; i <= n; i++) {
878 if(in[i] != -1) {
879 cout << -1;
880 return 0;
881 }
882 }
883 cout << oss.str();
884 return 0;
885 }

引用了 acwing::acwing836_408::find().

被这些函数引用 TEST().

◆ TEST() [1/4]

acwing::acwing848_408::TEST ( acwing848_408  ,
case1   
)

在文件 acwing408_test.cpp1204 行定义.

1204 {
1205 istringstream in("3 3\n"
1206 "1 2\n"
1207 "2 3\n"
1208 "1 3");
1209 auto out = ostringstream();
1210 main(in, out);
1211 const auto ans = out.str();
1212 ASSERT_EQ("1 2 3 ",
1213 ans);
1214 }
int main(int argc, char **argv)
Definition: main.cpp:5

引用了 main().

◆ TEST() [2/4]

acwing::acwing848_408::TEST ( acwing848_408  ,
case2   
)

在文件 acwing408_test.cpp1216 行定义.

1216 {
1217 istringstream in("5 10\n"
1218 "2 3\n"
1219 "2 5\n"
1220 "2 5\n"
1221 "1 4\n"
1222 "2 4\n"
1223 "1 2\n"
1224 "2 3\n"
1225 "2 4\n"
1226 "3 5\n"
1227 "3 4");
1228 auto out = ostringstream();
1229 main(in, out);
1230 const auto ans = out.str();
1231 ASSERT_EQ("1 2 3 4 5 ",
1232 ans);
1233 }

引用了 main().

◆ TEST() [3/4]

acwing::acwing848_408::TEST ( acwing848_408  ,
case3   
)

在文件 acwing408_test.cpp1235 行定义.

1235 {
1236 istringstream in("10 20\n"
1237 "2 3\n"
1238 "5 10\n"
1239 "1 5\n"
1240 "2 5\n"
1241 "4 6\n"
1242 "1 2\n"
1243 "4 5\n"
1244 "3 7\n"
1245 "2 10\n"
1246 "4 4\n"
1247 "1 7\n"
1248 "1 2\n"
1249 "1 4\n"
1250 "3 8\n"
1251 "7 8\n"
1252 "1 2\n"
1253 "2 5\n"
1254 "4 7\n"
1255 "2 9\n"
1256 "3 10");
1257 auto out = ostringstream();
1258 main(in, out);
1259 const auto ans = out.str();
1260 ASSERT_EQ("-1",
1261 ans);
1262 }

引用了 main().

◆ TEST() [4/4]

acwing::acwing848_408::TEST ( acwing848_408  ,
case4   
)

在文件 acwing408_test.cpp1264 行定义.

1264 {
1265 istringstream in("4 4\n"
1266 "2 1\n"
1267 "1 3\n"
1268 "1 4\n"
1269 "3 4");
1270 auto out = ostringstream();
1271 main(in, out);
1272 const auto ans = out.str();
1273 ASSERT_EQ("2 1 3 4 ",
1274 ans);
1275 }

引用了 main().