<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=0543_-_Bipartit_2</id>
	<title>0543 - Bipartit 2 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=0543_-_Bipartit_2"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0543_-_Bipartit_2&amp;action=history"/>
	<updated>2026-05-01T03:40:33Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0543_-_Bipartit_2&amp;diff=8968&amp;oldid=prev</id>
		<title>Brianna Waltner: Pagină nouă: == Cerinţa == Se dă lista muchiilor unui graf neorientat conex cu &#039;&#039;&#039;n&#039;&#039;&#039; vârfuri, etichetate de la &#039;&#039;&#039;1&#039;&#039;&#039; la &#039;&#039;&#039;n&#039;&#039;&#039;. Să se verifice dacă graful este bipartit. == Date de intrare == Fişierul de intrare &#039;&#039;&#039;bipartit2in.txt&#039;&#039;&#039; conţine pe prima linie numerele &#039;&#039;&#039;n&#039;&#039;&#039; și &#039;&#039;&#039;m&#039;&#039;&#039;, reprezentând numărul de vârfuri ale grafului și numărul de muchii. Fiecare dintre următoarele &#039;&#039;&#039;m&#039;&#039;&#039; linii conține câte o pereche de numere &#039;&#039;&#039;i j&#039;&#039;&#039;, cu semnificația că există muchi...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0543_-_Bipartit_2&amp;diff=8968&amp;oldid=prev"/>
		<updated>2024-01-04T14:21:17Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: == Cerinţa == Se dă lista muchiilor unui graf neorientat conex cu &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; vârfuri, etichetate de la &amp;#039;&amp;#039;&amp;#039;1&amp;#039;&amp;#039;&amp;#039; la &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039;. Să se verifice dacă graful este bipartit. == Date de intrare == Fişierul de intrare &amp;#039;&amp;#039;&amp;#039;bipartit2in.txt&amp;#039;&amp;#039;&amp;#039; conţine pe prima linie numerele &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; și &amp;#039;&amp;#039;&amp;#039;m&amp;#039;&amp;#039;&amp;#039;, reprezentând numărul de vârfuri ale grafului și numărul de muchii. Fiecare dintre următoarele &amp;#039;&amp;#039;&amp;#039;m&amp;#039;&amp;#039;&amp;#039; linii conține câte o pereche de numere &amp;#039;&amp;#039;&amp;#039;i j&amp;#039;&amp;#039;&amp;#039;, cu semnificația că există muchi...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dă lista muchiilor unui graf neorientat conex cu &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; vârfuri, etichetate de la &amp;#039;&amp;#039;&amp;#039;1&amp;#039;&amp;#039;&amp;#039; la &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039;. Să se verifice dacă graful este bipartit.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fişierul de intrare &amp;#039;&amp;#039;&amp;#039;bipartit2in.txt&amp;#039;&amp;#039;&amp;#039; conţine pe prima linie numerele &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; și &amp;#039;&amp;#039;&amp;#039;m&amp;#039;&amp;#039;&amp;#039;, reprezentând numărul de vârfuri ale grafului și numărul de muchii. Fiecare dintre următoarele &amp;#039;&amp;#039;&amp;#039;m&amp;#039;&amp;#039;&amp;#039; linii conține câte o pereche de numere &amp;#039;&amp;#039;&amp;#039;i j&amp;#039;&amp;#039;&amp;#039;, cu semnificația că există muchie între &amp;#039;&amp;#039;&amp;#039;i&amp;#039;&amp;#039;&amp;#039; și &amp;#039;&amp;#039;&amp;#039;j&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fişierul de ieşire &amp;#039;&amp;#039;&amp;#039;bipartit2out.txt&amp;#039;&amp;#039;&amp;#039; va conţine pe prima linie mesajul &amp;#039;&amp;#039;&amp;#039;DA&amp;#039;&amp;#039;&amp;#039;, dacă graful este bipartit, respectiv &amp;#039;&amp;#039;&amp;#039;NU&amp;#039;&amp;#039;&amp;#039; în caz contrar.&lt;br /&gt;
&lt;br /&gt;
Dacă mesajul este &amp;#039;&amp;#039;&amp;#039;DA&amp;#039;&amp;#039;&amp;#039;, următoarele două linii vor conţine două mulţimi care formează partiţia vârfurilor. Elementele fiecărei mulţimi vor fi afişate în ordine crescătoare, separate prin exact un spaţiu. Prima mulţime va fi cea care conţine vârful &amp;#039;&amp;#039;&amp;#039;1&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;1 &amp;amp;les; n &amp;amp;les; 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;1 &amp;amp;les; i , j &amp;amp;les; n&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
;&amp;#039;&amp;#039;&amp;#039;bipartit2in.txt&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 7 6&lt;br /&gt;
 1 4&lt;br /&gt;
 1 6&lt;br /&gt;
 6 5&lt;br /&gt;
 3 2&lt;br /&gt;
 3 5&lt;br /&gt;
 3 7&lt;br /&gt;
;&amp;#039;&amp;#039;&amp;#039;bipartit2out.txt&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
 Datele de intrare corespund resprictiilor impuse&lt;br /&gt;
 DA&lt;br /&gt;
 1 2 5 7 &lt;br /&gt;
 3 4 6 &lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
;&amp;#039;&amp;#039;&amp;#039;bipartit2in.txt&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 0 6&lt;br /&gt;
 1 4&lt;br /&gt;
 1 6&lt;br /&gt;
 6 5&lt;br /&gt;
 3 2&lt;br /&gt;
 3 5&lt;br /&gt;
 3 7&lt;br /&gt;
;&amp;#039;&amp;#039;&amp;#039;bipartit2out.txt&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 Datele de intrare nu corespund resprictiilor impuse&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
from collections import defaultdict&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def is_bipartite():&lt;br /&gt;
    with open(&amp;#039;bipartit2in.txt&amp;#039;, &amp;#039;r&amp;#039;) as fin:&lt;br /&gt;
        n, m = map(int, fin.readline().split())&lt;br /&gt;
        if n &amp;lt;= 1 or n &amp;gt; 100:&lt;br /&gt;
            return &amp;quot;Datele de intrare nu corespund resprictiilor impuse&amp;quot;, [], []&lt;br /&gt;
        edges = [tuple(map(int, line.split())) for line in fin.readlines()]&lt;br /&gt;
        for u, v in edges:&lt;br /&gt;
            if u &amp;lt; 1 or u &amp;gt; n or v &amp;lt; 1 or v &amp;gt; n:&lt;br /&gt;
                return &amp;quot;Datele de intrare nu corespund resprictiilor impuse&amp;quot;, [], []&lt;br /&gt;
&lt;br /&gt;
    print(&amp;quot;Datele de intrare corespund resprictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    graph = defaultdict(list)&lt;br /&gt;
    for u, v in edges:&lt;br /&gt;
        graph[u].append(v)&lt;br /&gt;
        graph[v].append(u)&lt;br /&gt;
&lt;br /&gt;
    color = defaultdict(int)&lt;br /&gt;
    partition = defaultdict(list)&lt;br /&gt;
    for node in range(1, n+1):&lt;br /&gt;
        if node not in color:&lt;br /&gt;
            stack = [(node, 1)]&lt;br /&gt;
            while stack:&lt;br /&gt;
                node, c = stack.pop()&lt;br /&gt;
                color[node] = c&lt;br /&gt;
                partition[c].append(node)&lt;br /&gt;
                for neighbour in graph[node]:&lt;br /&gt;
                    if neighbour not in color:&lt;br /&gt;
                        stack.append((neighbour, -c))&lt;br /&gt;
                    elif color[neighbour] == color[node]:&lt;br /&gt;
                        return &amp;#039;NU&amp;#039;, [], []&lt;br /&gt;
    return &amp;#039;DA&amp;#039;, sorted(partition[1]), sorted(partition[-1])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
result, group1, group2 = is_bipartite()&lt;br /&gt;
with open(&amp;#039;bipartit2out.txt&amp;#039;, &amp;#039;w&amp;#039;) as fout:&lt;br /&gt;
    fout.write(result + &amp;#039;\n&amp;#039;)&lt;br /&gt;
    if result == &amp;#039;DA&amp;#039;:&lt;br /&gt;
        fout.write(&amp;#039; &amp;#039;.join(map(str, group1)) + &amp;#039;\n&amp;#039;)&lt;br /&gt;
        fout.write(&amp;#039; &amp;#039;.join(map(str, group2)) + &amp;#039;\n&amp;#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Brianna Waltner</name></author>
	</entry>
</feed>