Vyacheslav
Ну давайте для ясности определимся что как раз не по ссылке ;) в си все же есть разница между ссылкой и указателем.
А разве в Си вообще есть ссылки? Вроде только указатели и оператор & просто возвращает адрес ячейки
Rustam
#си #вопрос 🌟🌟🌟 уважаемые знатоки Си ‼️ почему: scanf("%d", &sum); но printf("%d", sum); я имею в виду, почему для printf производится передача по значению, а в scanf передача по ссылке? ‼️
потому что для того чтобы изменить значение переменной через scanf нужно передать указатель, а не копию значения. Как по другому код внутри scanf должен изменить значение внешней переменной недоступной ему?
Rustam
потому что для того чтобы изменить значение переменной через scanf нужно передать указатель, а не копию значения. Как по другому код внутри scanf должен изменить значение внешней переменной недоступной ему?
А для реализации printf в то же время без разницы что принимать. Тут чисто логика, раз нам не нужно внутри printf менять значение какой-то внешней переменной, то достаточно передачи по значению
сережа
всем привет, решаю учебную задачу: количество компонент связности невзвешенного неориентированного графа, но получаю tl. голову сломал, как сделать быстрее? извиняюсь, не дополнил: нужно вывести количество компонент, а затем для каждой из них вывести вершины, принадлежащие ей #include <bits/stdc++.h> using namespace std; vector<vector<int>> g; vector<int> used; vector<int> colors; void dfs(int v, int color) { used[v] = 1; colors[v] = color; for (auto u : g[v]) { if (!used[u]) { dfs(u, color); } } } int main() { cin.tie(nullptr); int n, m; cin >> n >> m; colors.resize(n); g.resize(n); used.resize(n); for (int j = 0; j < m; j++) { int u, v; cin >> u >> v; g[v - 1].push_back(u - 1); g[u - 1].push_back(v - 1); } int color = 0; for (int j = 0; j < n; j++) { if (!used[j]) { dfs(j, color); } color++; } set<int> dd; for (int k : colors) { dd.insert(k); } cout << (int)dd.size() << '\n'; for (int k : dd) { cout << count(colors.begin(), colors.end(), k) << '\n'; for (int j = 0; j < n; j++) { if (colors[j] == k) { cout << j + 1 << ' '; } } cout << '\n'; } return 0; }
Rustam
всем привет, решаю учебную задачу: количество компонент связности невзвешенного неориентированного графа, но получаю tl. голову сломал, как сделать быстрее? извиняюсь, не дополнил: нужно вывести количество компонент, а затем для каждой из них вывести вершины, принадлежащие ей #include <bits/stdc++.h> using namespace std; vector<vector<int>> g; vector<int> used; vector<int> colors; void dfs(int v, int color) { used[v] = 1; colors[v] = color; for (auto u : g[v]) { if (!used[u]) { dfs(u, color); } } } int main() { cin.tie(nullptr); int n, m; cin >> n >> m; colors.resize(n); g.resize(n); used.resize(n); for (int j = 0; j < m; j++) { int u, v; cin >> u >> v; g[v - 1].push_back(u - 1); g[u - 1].push_back(v - 1); } int color = 0; for (int j = 0; j < n; j++) { if (!used[j]) { dfs(j, color); } color++; } set<int> dd; for (int k : colors) { dd.insert(k); } cout << (int)dd.size() << '\n'; for (int k : dd) { cout << count(colors.begin(), colors.end(), k) << '\n'; for (int j = 0; j < n; j++) { if (colors[j] == k) { cout << j + 1 << ' '; } } cout << '\n'; } return 0; }
А что делается начиная со строчки set<int> dd;?
сережа
извиняюсь, не дополнил: нужно вывести количество компонент, а затем для каждой из них вывести вершины, принадлежащие ей
Rustam
извиняюсь, не дополнил: нужно вывести количество компонент, а затем для каждой из них вывести вершины, принадлежащие ей
Тогда понятно, смотрите, вы все правильно делаете с точки зрения подсчета компонент связности, но что мешает прямо в поиске в глубину собирать текущую компоненту связности в вектор? Результатом прохода for (int j = 0; j < n; j++) цикла будет vector<vector<int>> components;
Rustam
тогда никакие цвета не нужны, set-ы и так далее
Rustam
tl - это про эффективность выполнения алгоритма, я советую как сделать более оптимально
Rustam
Я же не вижу входных данных задачи и ограничений
Igor
в этом смысл алгоримов ... чтобы оценить не видя входных данных ;)
Rustam
Нет, вы не понимаете о чем говорите.
Igor
всем привет, решаю учебную задачу: количество компонент связности невзвешенного неориентированного графа, но получаю tl. голову сломал, как сделать быстрее? извиняюсь, не дополнил: нужно вывести количество компонент, а затем для каждой из них вывести вершины, принадлежащие ей #include <bits/stdc++.h> using namespace std; vector<vector<int>> g; vector<int> used; vector<int> colors; void dfs(int v, int color) { used[v] = 1; colors[v] = color; for (auto u : g[v]) { if (!used[u]) { dfs(u, color); } } } int main() { cin.tie(nullptr); int n, m; cin >> n >> m; colors.resize(n); g.resize(n); used.resize(n); for (int j = 0; j < m; j++) { int u, v; cin >> u >> v; g[v - 1].push_back(u - 1); g[u - 1].push_back(v - 1); } int color = 0; for (int j = 0; j < n; j++) { if (!used[j]) { dfs(j, color); } color++; } set<int> dd; for (int k : colors) { dd.insert(k); } cout << (int)dd.size() << '\n'; for (int k : dd) { cout << count(colors.begin(), colors.end(), k) << '\n'; for (int j = 0; j < n; j++) { if (colors[j] == k) { cout << j + 1 << ' '; } } cout << '\n'; } return 0; }
Последний цикл в случае если все вершини отдельны квадрат
Igor
Нет, вы не понимаете о чем говорите.
Окей главное что ты понимаешь ;)
сережа
Последний цикл в случае если все вершини отдельны квадрат
понимаю, но вот придумать ничего лучше не получается
Rustam
В задаче может быть ограничение n до 5000 элементов и пройдет алгоритм за квадрат. Может быть 1e5 и квадрат не пройдет. А вы как в случае и с ссылками пытаетесь умничать в том, в чем не разбираетесь :)
Rustam
Да главное, что вы всё знаете и понимаете :) и оцениваете алгоритм не с точки зрения требований, успехов вам)
Igor
В задаче может быть ограничение n до 5000 элементов и пройдет алгоритм за квадрат. Может быть 1e5 и квадрат не пройдет. А вы как в случае и с ссылками пытаетесь умничать в том, в чем не разбираетесь :)
У нас был линейный алгоритм ... но последним циклом мы его превратили в квадрат ... если для того тебе нужны ограничения ... наверное ты тоже ограниченный ;)
Rustam
да, ограничения 1e6(
Вы поняли идею, которую я вам подкинул?
Rustam
У нас был линейный алгоритм ... но последним циклом мы его превратили в квадрат ... если для того тебе нужны ограничения ... наверное ты тоже ограниченный ;)
https://telegra.ph/Kak-stat-programmistom---pravila-soobshchestva-05-29 )) правила вы тоже не читали, как и базу по Си, так и базу по алгоритмам))
Denis
Всем ку, может кто нибудь помочь найти ошибку в верстке, секция не полностью принимает в себя контейнер с flex wrap wrap и он выходит за ее пределы
сережа
да, попробую реализовать, благодарю
Igor
да, попробую реализовать, благодарю
ты можешь выводить прям в дфс чтобы не парить себе мозг ;)
Igor
ты красишь цвета по порядку ... соответсвенно и выводить можешь так же ... без всякого секса
Igor
массив колорс вообще не нужен
Igor
https://telegra.ph/Kak-stat-programmistom---pravila-soobshchestva-05-29 )) правила вы тоже не читали, как и базу по Си, так и базу по алгоритмам))
базу по си мне для алгоритмов знать не нужно я вообще пишу на питоне. Эффективность алгоритма не зависит от языка. Прежде чем давать советы лучше подумать.
Igor
Ладно ты молодец .... я лох и опозорился ... все ломает необходимость вывести кол-во цветов. Однако вопро "где тл" ... это не отменяет ;)
Igor
тл был в последнем цикле и для этого не нужно знать ограничения.
Александр
Подскажите альтернативы jsonkeeper
Александр
Спасибо
Maksim Pozharskiy
late
Всем привет! Что вы думаете про Rust? Есть ли у него будущее? Стоит ли учить для системного программирования или лучше выбрать C++?
late
Лучше выбрать то что тебе нравится. ИМХО
Я долгое время выбирал подходящий язык и даже смотрел в сторону nim, zig и v, но в итоге остановился на Rust из-за более простого синтаксиса
Шаман Каган
ну тогда чего ты колеблешься?
late
ну тогда чего ты колеблешься?
Боюсь, что он не до конца прижился и через несколько лет может стать неактуальным
Шаман Каган
ну коммон ну перейдешь на Го или еще на что нибудь просто получай удовольствие
Дмитрий
Меня тоже ломает c# или JavaScript 😁
late
Что ты понимаешь под системным программированием. Что ты собираешься писать?
Высоконагруженные веб-приложения. В Rust с этим намного лучше, чем у его конкурентов
Igor
Высоконагруженные веб-приложения. В Rust с этим намного лучше, чем у его конкурентов
смотри у тебя у самого есть ответы на все вопросы ;) зачем ты спрашиваешь в интернете ;)
late
смотри у тебя у самого есть ответы на все вопросы ;) зачем ты спрашиваешь в интернете ;)
Возможно меня смогут переубедить и посоветовать инструмент получше
Шаман Каган
Мне не нравится синтаксис go
в жизни всегда место подвигу есть !
late
Давай на PHP
Он ведь старый и медленный
depre??ed
Можно на индивидуальные уроки по си к Алексею
Bashka
Интернеты х.йню не посоветуют....
Дмитрий
Выбирай JS#
Идиалити!
Сидредин
Он ведь старый и медленный
Ааа, забыл, что тебе надо для системного программирования. А так, я рофлил)
Шаман Каган
Он ведь старый и медленный
так вот не надо тут про медленный
Дмитрий
В каком смысле?
В смысле задач решаемых на сях будет всегда больше
Igor
так я более чем серьезно в данном случае ответил ... считаю что если есть личная убежденность ... спрашивать у людей в сети не стоит. Именно потому что инет во первых токсичен во вторых не компетентен
m700
Мне не нравится синтаксис go
на работе так же? "мне это не нравится это я не буду"
Igor
лучше уверенно делать ошибки чем бояться сделать шаг
Maksim Pozharskiy
В том формате лучше во флудилку
late
В смысле задач решаемых на сях будет всегда больше
Создатели Rust позиционируют его как универсальный яп
late
Что можно написать на c++, чего нельзя на Rust?
Igor
лан проехали я переформулировал ... надеюсь все довольны
Igor
Что можно написать на c++, чего нельзя на Rust?
все языки тьюринг полные. Поэтому теоретически ничего. Вопрос в усилиях
Сидредин
Раст ближе к С или С++? ООП есть в Раст?
m700
Мне для личного использования
ну тогда и смысла в вопросе изначально нет