Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define INF int(1e9)
- vector<vector<double>>g(10,vector<double>(10,-1));// матрица смежности
- vector<int>us(10,-1); // сохраняем уровень вершин
- void dfs(int x,int k=1){
- us[x]=max(us[x],k); // при входе в вершину сохраняем максимальный путь
- forx(i,0,10){
- if(g[x][i]==-1)
- continue;
- dfs(i,k+1); // запускаемся дальше в глубь графа
- }
- }
- void solution() {
- vector<int>p(5);
- forx(i,0,5) // ввод приоритетов
- cin>>p[i];
- vector<int>w(5);
- forx(i,0,5) // ввод весов
- cin>>w[i];
- vector<vector<int>>v(10,vector<int>(5,0));
- forx(i,0,10)
- forx(j,0,5)
- cin>>v[i][j]; // ввод весов
- forx(i,0,10){
- forx(j,0,10){ // сравниваем каждый элемент со всеми
- if(i==j)
- continue;
- int a=0,b=0;
- string s,u;
- forx(k,0,5) { // цикл по каждому пункту
- if(v[i][k]>v[j][k] && p[k]==1 || v[i][k]<v[j][k] && p[k]==0){ если v[i] по k критерию лучше
- a+=w[k]; // сохраняем вес
- s+=" + "+to_string(w[k]);
- u+=" + 0";
- }
- if(v[i][k]<v[j][k] && p[k]==1 || v[i][k]>v[j][k] && p[k]==0) { если v[j] по k критерию лучше
- b += w[k];// сохраняем вес
- u+=" + "+to_string(w[k]);
- s+=" + 0";
- }
- if(v[i][k]==v[j][k]){
- u+=" + 0";
- s+=" + 0";
- }
- }
- s.erase(0,3);
- u.erase(0,3);
- if(b==0){ // ребра нет
- g[i][j]=INF;
- }
- else{ // добавляем ребро
- double q=a*1./b;
- if(q>=1)
- g[i][j]=q;
- }
- }
- }
- forx(i,0,10)
- forx(j,0,10)
- if(g[i][j]<1.7 || g[i][j]==INF) // ограничение на вес ребра
- g[i][j]=-1;
- forx(i,0,10){ // вывод матрицы смежности
- cout<<i+1<<"\t";
- for(double& j:g[i])
- cout<<j<<"\t";
- printer();
- }
- forx(i,0,10){ // запуск поиска в глубину из каждой вершины
- dfs(i);
- }
- forx(i,0,10){ // вывод уровней
- if(find(all(us),i+1)!=us.end())
- cout<<"\n"<<i+1<<")";
- forx(j,0,10)
- if(us[j]==i+1)
- cout<<"\t"<<j+1;
- }
- }
- int32_t main() {
- SetConsoleCP(65001);
- SetConsoleOutputCP(65001);
- solution();
- }
Add Comment
Please, Sign In to add comment